在服务之间共享 Azure Service Fabric 可靠队列
Sharing Azure Service Fabric Reliable Queues Between Services
我正在深入研究 Service Fabric(来自云服务领域),并且在 ReliableQueues 的工作方式方面遇到了一些障碍。
假设我有 2 个有状态服务 StatefulService1 和 StatefulService2.
如果我需要 StatefulService1 在队列中发送一条消息,StatefulService2 将接收并读取我是否可以使用 ReliableQueues还是 ReliableQueues 在创建它们的服务中是隔离的?
如果是这样,那么拥有 ReliableQueues 的目的是什么?它们背后的通常模式是让另一个进程对消息进行操作。我理解为什么将字典与服务隔离是有意义的,但不是队列...
我最好的选择是依靠传统方法(例如存储队列)发送此消息,还是 ServiceFabric 是否提供在服务之间传递消息队列的解决方案?
更新
只是想澄清一下,我确实尝试从 StatefulService2 中取出一条在 StatefulService1 中创建的消息,但结果是空的。从 StatefulService1 中出队按预期工作得很好。
可靠集合(队列和字典)不用于通信。对于队列,它是一个 2PC,因此在任何时间点只有一个进程可以访问它。请注意,当您将有状态服务与分区一起使用时,要访问数据,两个服务实例必须位于同一分区上。不同的分区不能访问相同的数据。
依靠传统方法或实现您自己的通信侦听器是可行的方法。使用传统方式 - 请记住,您需要决定是否要像您的服务一样对队列进行分区。
您必须在调用代码中添加故障处理重试模式,请参阅 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication,在这种情况下,您不需要队列来保存服务调用之间的数据。
可靠集合位于内存数据结构中,不用于服务间通信。如果您想在 StatefulService1 和 StatefulService2 之间建立通信通道,您有以下选择:
使用通讯侦听器。您可以为您选择的协议设置自定义侦听器,包括 HTTP、WCF 或您的自定义协议。您可以在此 section 中阅读更多相关信息。例如,StatefulService2 可以打开一个 HTTP 端点,StatefulService1 可以 POST/GET 到。
使用外部队列系统,如 Servicebus、EventHub 或 Kafka,其中 StatefulService1 可以 post 事件。 StatefulService2 可以是消费者服务,它从队列中消费事件并对其进行处理。
我不明白为什么服务不能承载可靠的 collection/queue,而其他服务可以通过以下三种传输之一访问它:远程处理、WCF 和 HTTP。
显然,可靠的服务必须通过 API 公开 collection/queue 或实现 IService 接口
我正在深入研究 Service Fabric(来自云服务领域),并且在 ReliableQueues 的工作方式方面遇到了一些障碍。
假设我有 2 个有状态服务 StatefulService1 和 StatefulService2.
如果我需要 StatefulService1 在队列中发送一条消息,StatefulService2 将接收并读取我是否可以使用 ReliableQueues还是 ReliableQueues 在创建它们的服务中是隔离的?
如果是这样,那么拥有 ReliableQueues 的目的是什么?它们背后的通常模式是让另一个进程对消息进行操作。我理解为什么将字典与服务隔离是有意义的,但不是队列...
我最好的选择是依靠传统方法(例如存储队列)发送此消息,还是 ServiceFabric 是否提供在服务之间传递消息队列的解决方案?
更新
只是想澄清一下,我确实尝试从 StatefulService2 中取出一条在 StatefulService1 中创建的消息,但结果是空的。从 StatefulService1 中出队按预期工作得很好。
可靠集合(队列和字典)不用于通信。对于队列,它是一个 2PC,因此在任何时间点只有一个进程可以访问它。请注意,当您将有状态服务与分区一起使用时,要访问数据,两个服务实例必须位于同一分区上。不同的分区不能访问相同的数据。
依靠传统方法或实现您自己的通信侦听器是可行的方法。使用传统方式 - 请记住,您需要决定是否要像您的服务一样对队列进行分区。
您必须在调用代码中添加故障处理重试模式,请参阅 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication,在这种情况下,您不需要队列来保存服务调用之间的数据。
可靠集合位于内存数据结构中,不用于服务间通信。如果您想在 StatefulService1 和 StatefulService2 之间建立通信通道,您有以下选择:
使用通讯侦听器。您可以为您选择的协议设置自定义侦听器,包括 HTTP、WCF 或您的自定义协议。您可以在此 section 中阅读更多相关信息。例如,StatefulService2 可以打开一个 HTTP 端点,StatefulService1 可以 POST/GET 到。
使用外部队列系统,如 Servicebus、EventHub 或 Kafka,其中 StatefulService1 可以 post 事件。 StatefulService2 可以是消费者服务,它从队列中消费事件并对其进行处理。
我不明白为什么服务不能承载可靠的 collection/queue,而其他服务可以通过以下三种传输之一访问它:远程处理、WCF 和 HTTP。
显然,可靠的服务必须通过 API 公开 collection/queue 或实现 IService 接口