我正在开发一个 Azure Service Fabric 应用程序,其中有一些演员需要根据需求接收来自其他服务的 ping/hook。该应用程序是一种事件分发引擎,旨在像这样工作:
- 可以接收事件并负责将该事件分发给该事件类型的所有订阅者的事件路由器演员。 - 0..N个事件订阅演员,它们需要以某种方式通知路由器它们希望订阅哪种类型的事件以及它们希望如何交付它们(同步还是异步)。 - 当事件路由器演员接收到类型为 MyEvent 的事件时,它将确定哪些订阅者正在侦听以及它们希望如何交付事件。对于异步交付,消息将在 Azure Service Bus 主题中弹出。但是对于同步交付,路由器演员将直接调用订阅演员的订阅方法,并等待其响应。
大部分都很简单,但我不太确定如何实现这些事件的同步交付。我不希望事件路由器演员以任何方式了解订阅事件的演员的任何内部情况,但是使用当前的 ActorProxy 实现和类似内容,需要访问接口才能在其他演员上调用方法。
假设我订阅了一个事件类型,通知事件路由器我的地址是 fabric:/MyApp/MyEventSubscriberActor,并且我想订阅 MyEvent。在 Service Fabric APIs 中,是否有明智的方法可以编程地在那个演员上调用方法而无需使用 ActorProxy.Create<IMyEventSubscriberActor>() 方法(例如 OnEventAsync(MyEvent ev))?这些 API 的源代码似乎不是公开可用的,因此我没有直接检查其工作原理的方法。
- 可以接收事件并负责将该事件分发给该事件类型的所有订阅者的事件路由器演员。 - 0..N个事件订阅演员,它们需要以某种方式通知路由器它们希望订阅哪种类型的事件以及它们希望如何交付它们(同步还是异步)。 - 当事件路由器演员接收到类型为 MyEvent 的事件时,它将确定哪些订阅者正在侦听以及它们希望如何交付事件。对于异步交付,消息将在 Azure Service Bus 主题中弹出。但是对于同步交付,路由器演员将直接调用订阅演员的订阅方法,并等待其响应。
大部分都很简单,但我不太确定如何实现这些事件的同步交付。我不希望事件路由器演员以任何方式了解订阅事件的演员的任何内部情况,但是使用当前的 ActorProxy 实现和类似内容,需要访问接口才能在其他演员上调用方法。
假设我订阅了一个事件类型,通知事件路由器我的地址是 fabric:/MyApp/MyEventSubscriberActor,并且我想订阅 MyEvent。在 Service Fabric APIs 中,是否有明智的方法可以编程地在那个演员上调用方法而无需使用 ActorProxy.Create<IMyEventSubscriberActor>() 方法(例如 OnEventAsync(MyEvent ev))?这些 API 的源代码似乎不是公开可用的,因此我没有直接检查其工作原理的方法。