azure-service-fabric - Azure Service Fabric 中的发布/订阅模式

标签 azure-service-fabric

我正在这里开发一个 Azure Service Fabric 应用程序,其中某些参与者需要按需接收来自其他服务的 ping/hook。该应用程序是一种事件分发引擎,旨在像这样工作:

  • 一个事件路由器参与者,它可以接收一个事件,然后负责将该事件分发给该事件类型的所有订阅者。
  • 0..N 个事件订阅参与者,它们需要以某种方式通知路由器他们希望订阅什么类型的事件以及他们希望它们如何传递(同步或异步)。
  • 当事件路由器参与者接收到 MyEvent 类型的事件时,它将识别订阅者正在收听的内容以及他们希望如何传递事件。对于异步传递,将在 Azure 服务总线主题中弹出一条消息。但是,对于同步交付,路由器参与者将直接调用订阅参与者的订阅方法,等待他们的响应。

  • 其中大部分是相当直截了当的,但我不完全确定我将如何实现这些事件的同步传递。我不希望事件路由器参与者以任何方式知道订阅事件的参与者中的任何内部结构 - 但是使用当前的 ActorProxy实现和类似的,需要访问接口(interface)才能调用其他参与者的方法。

    假设我订阅了一个事件类型,通知事件路由器我的地址是 fabric:/MyApp/MyEventSubscriberActor我想订阅MyEvent .在 Service Fabric API 中是否有任何明智的方法我可以在没有的情况下以编程方式调用该参与者的方法(例如 OnEventAsync(MyEvent ev) 使用 ActorProxy.Create<IMyEventSubscriberActor>() 方法?这些 API 的源代码似乎不公开,所以我无法直接检查这是如何在幕后完成的。

    最佳答案

    事件订阅参与者可以实现包含“事件可用”方法的事件订阅接口(interface)。它可以将该接口(interface)传递给事件路由器参与者接口(interface)上的“订阅事件”方法。

    事件路由器参与者接口(interface)可以保留对订阅接口(interface)的引用作为其状态的一部分。当订阅者感兴趣的事件发生时,它可以在它之前接收并保存的接口(interface)上调用“event-available”方法。所有这一切都可以在没有显式创建一个actor代理来与事件订阅actor通信的情况下完成(actor序列化基础设施在后台执行此操作)。

    这是一个非常基本的示例,它省略了事件类型,假设只有一个订阅者等,但应该让您了解该技术。

    接口(interface):

    interface IEventRouter : IActor
    {
        void Subscribe(IEventSubscriber subscriber);
    }
    
    interface IEventSubscriber : IActor
    {
        void EventAvailable();
    }
    

    事件订阅者代码:
    class EventSubscriber : Actor, IEventSubscriber
    {
        void SubscribeToEvent()
        {
            IEventRouter router = ActorProxy.Create<IEventRouter>("fabric:/MyApp/MyEventRouterActor");
            router.Subscribe(this);
        }
    
        public void EventAvailable()
        {
            // Process the event
        }
    }
    

    事件路由器代码:
    // Define actor state
    [DataContract]
    class RouterState
    {
        [DataMember]
        public IEventSubscriber Subscriber;
    }
    
    // Define actor
    class EventRouter : Actor<RouterState>, IEventRouter
    {
        public void Subscribe(IEventSubscriber subscriber)
        {
            this.State.Subscriber = subscriber;
        }
    
        void OnEventAvailable()
        {
            this.State.Subscriber.EventAvailable();
        }
    }       
    

    关于azure-service-fabric - Azure Service Fabric 中的发布/订阅模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733581/

    相关文章:

    azure - Service Fabric 默认发布配置文件而不是 Local.xml

    azure - Service Fabric - 跟踪语句不记录

    c# - Web Api 和 Web ui 在同一应用程序/服务中

    .net-core - 使用 .NET Core 的 Service Fabric 可靠服务

    azure-service-fabric - 集群节点 VM 大小选项

    azure - 在托管磁盘上设置 Azure Service Fabric 群集

    c# - 使用通用参数的 Azure Service Fabric 远程处理

    Azure 服务结构 : Unprovision application version

    azure - 在哪里设置和访问服务结构每个环境的运行时配置参数?

    Azure 部署 Service Fabric 应用程序错误 : no