在服务之间共享Azure Service Fabric可靠队列

时间:2017-03-05 19:14:26

标签: azure azure-service-fabric service-fabric-stateful

我正在深入了解Service Fabric(来自云服务世界),并且我对ReliableQueues的工作方式进行了几次减速。

我们说我有2个有状态服务 StatefulService1 StatefulService2

如果我需要 StatefulService1 在队列中发送消息 StatefulService2 将接收并读取我是否能够使用ReliableQueues或者在服务中隔离ReliableQueues他们在?

中创建

如果是这样的话,那么拥有ReliableQueues的目的是什么?它们背后的通常模式是另一个进程对消息采取行动。我理解为什么将字典隔离到服务是有意义的,但不是队列......

我最好选择依靠传统方法发送此消息(如存储队列),还是ServiceFabric提供了在服务之间传递消息队列的解决方案?

更新

只是想澄清我确实尝试从 StatefulService2 中将 StatefulService1 中创建的消息出列,并且它显示为空。从 StatefulService1 中取消正常工作正常。

4 个答案:

答案 0 :(得分:2)

Reliable Collections(队列和字典)不用于通信。对于队列,它是一个2PC,因此只有一个进程可以在任何时间点访问它。请注意,当您对分区使用有状态服务时,要访问数据,两个服务实例必须位于同一分区上。不同的分区无法访问相同的数据。

依靠传统方法或实现自己的通信监听器是可行的方法。使用传统方式 - 请记住,您需要决定是否要像对待服务一样对队列进行分区。

答案 1 :(得分:2)

可靠集合存在于不用于服务间通信的内存数据结构中。如果您想在 StatefulService1 StatefulService2 之间建立沟通渠道,您可以选择以下选项:

  1. 使用通讯听众。您可以为自己选择的协议提供自定义侦听器,包括HTTP,WCF或自定义协议。您可以在此section中详细了解它。例如, StatefulService2 可以打开 StatefulService1 可以POST / GET到的HTTP端点。

  2. 使用外部排队系统,如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接口

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-connect-and-communicate-with-services