我正在深入了解Service Fabric(来自云服务世界),并且我对ReliableQueues的工作方式进行了几次减速。
我们说我有2个有状态服务 StatefulService1 和 StatefulService2 。
如果我需要 StatefulService1 在队列中发送消息 StatefulService2 将接收并读取我是否能够使用ReliableQueues或者在服务中隔离ReliableQueues他们在?
中创建如果是这样的话,那么拥有ReliableQueues的目的是什么?它们背后的通常模式是另一个进程对消息采取行动。我理解为什么将字典隔离到服务是有意义的,但不是队列......
我最好选择依靠传统方法发送此消息(如存储队列),还是ServiceFabric提供了在服务之间传递消息队列的解决方案?
更新
只是想澄清我确实尝试从 StatefulService2 中将 StatefulService1 中创建的消息出列,并且它显示为空。从 StatefulService1 中取消正常工作正常。
答案 0 :(得分:2)
Reliable Collections(队列和字典)不用于通信。对于队列,它是一个2PC,因此只有一个进程可以在任何时间点访问它。请注意,当您对分区使用有状态服务时,要访问数据,两个服务实例必须位于同一分区上。不同的分区无法访问相同的数据。
依靠传统方法或实现自己的通信监听器是可行的方法。使用传统方式 - 请记住,您需要决定是否要像对待服务一样对队列进行分区。
答案 1 :(得分:2)
可靠集合存在于不用于服务间通信的内存数据结构中。如果您想在 StatefulService1 和 StatefulService2 之间建立沟通渠道,您可以选择以下选项:
使用通讯听众。您可以为自己选择的协议提供自定义侦听器,包括HTTP,WCF或自定义协议。您可以在此section中详细了解它。例如, StatefulService2 可以打开 StatefulService1 可以POST / GET到的HTTP端点。
使用外部排队系统,如Servicebus,EventHub或Kafka, StatefulService1 可以将事件发布到。 StatefulService2 可以是使用队列中的事件并对其进行处理的消费者服务。
答案 2 :(得分:0)
您必须在调用代码中添加一个错误处理重试模式,请参阅https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication,在这种情况下,您不需要一个队列来保存服务调用之间的数据。
答案 3 :(得分:0)
我不明白为什么服务无法托管可靠的集合/队列,其他服务可以通过以下三种传输之一访问它:远程处理,WCF和HTTP。 显然,可靠的服务必须通过API公开集合/队列或实现IService接口