【问题标题】:Sharing Azure Service Fabric Reliable Queues Between Services在服务之间共享 Azure Service Fabric 可靠队列
【发布时间】:2017-07-25 13:33:36
【问题描述】:

我正在深入研究 Service Fabric(来自云服务领域),并且在 ReliableQueues 的工作方式上遇到了一些障碍。

假设我有 2 个有状态服务 StatefulService1StatefulService2

如果我需要 StatefulService1 在队列中发送一条消息,StatefulService2 将接收并读取我是否可以使用 ReliableQueues 或者在他们的服务中隔离 ReliableQueues是在什么地方创建的?

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

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

更新

只是想澄清一下,我确实尝试将 StatefulService1 中创建的消息从 StatefulService2 中出列,但结果为空。 StatefulService1 中的出队按预期工作得很好。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢肖恩。你能帮我理解应该如何使用 ReliableQueue 吗?就像我说的 ReliableDictionary 是有道理的,因为它取代了缓存。但是,如果您有一个服务将消息提交到队列中,那么在什么情况下您会从队列中读取相同的服务?对我来说,队列是一种让其他进程通过解耦处理任务的方法,谢谢!
    • 可靠的队列非常适合将工作项排入队列。它不是服务之间的通信机制,而是单个进程的内存数据结构。例如,获取工作项并将它们排入队列,以便另一个线程(在该服务下)可以访问它以进行实际处理。
    • 谢谢。这就说得通了。因此,我现在可以让服务本身在单独的线程中运行这些任务,而不是(例如)让 WorkerRole 为许多服务运行任务。
    • 记住,服务之间的通信仍然需要一些东西。
    【解决方案2】:

    您必须在调用代码中添加故障处理重试模式,请参阅https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication,在这种情况下,您不需要队列来保存服务调用之间的数据。

    【讨论】:

      【解决方案3】:

      可靠集合位于内存数据结构中,不用于服务间通信。如果您想在 StatefulService1StatefulService2 之间建立通信通道,您有以下选择:

      1. 使用通信监听器。您可以为您选择的协议设置自定义侦听器,包括 HTTP、WCF 或您的自定义协议。您可以在此section 中了解更多信息。例如,StatefulService2 可以打开一个 StatefulService1 可以 POST/GET 到的 HTTP 端点。

      2. 使用外部队列系统,如 Servicebus、EventHub 或 Kafka,StatefulService1 可以向其中发布事件。 StatefulService2 可以是消费者服务,它使用队列中的事件并对其进行处理。

      【讨论】:

        【解决方案4】:

        我不明白为什么服务不能托管可靠的集合/队列,而其他服务可以通过以下三种传输之一访问它:远程处理、WCF 和 HTTP。
        显然,可靠的服务必须通过 API 公开集合/队列或实现 IService 接口

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

        【讨论】:

          猜你喜欢
          • 2017-03-28
          • 2016-07-26
          • 1970-01-01
          • 2016-09-29
          • 2020-04-05
          • 2016-02-17
          • 2017-10-30
          • 2017-12-01
          • 2017-05-03
          相关资源
          最近更新 更多