C# StatefulService contra ICommunicationListener的职责是什么
我将使用第三方消息传递系统来接收有状态服务的消息。因此,我开始研究C# StatefulService contra ICommunicationListener的职责是什么,c#,azure-service-fabric,service-fabric-stateful,C#,Azure Service Fabric,Service Fabric Stateful,我将使用第三方消息传递系统来接收有状态服务的消息。因此,我开始研究ICommunicationListener接口和现有示例。然而,由于大多数示例直接或间接地在通信侦听器中处理入站消息,因此不清楚它应该做什么。我找不到任何方法将入站消息传递给服务 因此,我找不到任何有意义的理由来解释为什么存在ICommunicationListener接口或CreateServiceReplicaListeners方法。服务本身已经掌握了有关如何创建和配置侦听器的所有知识。因此,您可以直接在有状态服务中配置自己
ICommunicationListener
接口和现有示例。然而,由于大多数示例直接或间接地在通信侦听器中处理入站消息,因此不清楚它应该做什么。我找不到任何方法将入站消息传递给服务
因此,我找不到任何有意义的理由来解释为什么存在ICommunicationListener
接口或CreateServiceReplicaListeners
方法。服务本身已经掌握了有关如何创建和配置侦听器的所有知识。因此,您可以直接在有状态服务中配置自己的侦听器(使用组合),而无需强制实现特定接口
那么,额外的复杂性增加了什么呢?下面是一个实现
ICommunicationListener
的示例。我传入一个处理传入消息的IServiceBusMessageReceiver 我也为此挣扎。在我看来,ICommunicationListener的名字是误导性的,因为在大多数情况下,它并不是真正的“东西”来进行倾听/交流。但是,它抽象了功能并定义了启动、关闭和中止实际通信通道的方法。这允许服务结构服务独立于实际通信通道启动和关闭。它还允许通信通道在服务突然关闭时正常关闭
也许不是答案,但很想发表评论。。。你的例子很好地说明了我的观点。无需使用
ICommunicationListener
接口。因此,你并不是在真正回答我的问题。这是关于分离关注点,你将通信通道与处理传入请求的方法断开。因此,如果消息来自其他/附加源,则服务不需要更改。你也可以有多个频道。它确实需要改变。它需要包含新的侦听器。我在问题中特别说明了成分。随着组合的出现,新通信方法的变化仍然很小。关于侦听器的启动/停止。除非服务启动/停止,否则它们会被调用吗?是的,当您需要它停止时(如在自定义的主动/被动设置中),或者当服务副本从非侦听辅助提升到侦听主或v.v.。但是这些更改也应用于服务本身,对吗?