Service Fabric,什么微服务最适合从服务总线进行连续轮询

Service Fabric, What Microservices is best intended for continuous polling from Service Bus

我是 Service Fabric 的新手。

我们在 Azure 服务总线上有一个队列。我想在我的 Service Fabric 中不断地从队列中提取消息,处理消息(执行一些业务逻辑)并在数据库中保存一些数据,然后从队列中删除消息。

微服务应每隔几秒检查一次队列以监视新消息。

我的问题是,将提取数据、处理一些业务逻辑然后保存到数据库的预期微服务是什么。它是无状态服务还是可靠参与者

你可以使用任何一个。无状态或有状态。是不是应该真的很重要。 在我看来,您可以执行以下操作:

  1. 创建自定义侦听器说 "ServiceBusCommunicationListener" 从 ICommunicationListener 派生。在ICommunicationListener的"public Task OpenAsync(CancellationToken cancellationToken)"方法中,可以编写代码访问服务总线队列。
  2. 对于服务总线队列读取,可以使用"Microsoft.ServiceBus.Messaging.SubscriptionClient"并使用它的"OnMessageAsync"方法来连续接收消息。
  3. 一旦你有了这个,在你的服务代码中,你可以使用 StatefulService 的 "CreateServiceReplicaListeners" 覆盖或 StatelessService 的 "CreateServiceInstanceListeners"。

        protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
            {
                return new[] { new ServiceReplicaListener(context => new ServiceBusCommunicationListener(context)) };
            }
    

(编辑:之前解释的问题有误)

我会说选择哪种型号是个人喜好问题。

您可以在所有节点上拥有无状态服务 运行,接收消息并在工作线程上处理它们。

由于单一条目模型(限制多线程选项),Actor 单手处理大量消息的能力较差。但是演员可以有很多。您可以让许多 Actor 监听消息。不过,您需要确保这些 Actor 存活下来。


原答案:

这个 nuget 包是这样做的:https://www.nuget.org/packages/ServiceFabric.ServiceBus.Services 它支持队列、主题、批处理和会话。

您的问题 space 似乎适合有状态或无状态模型。哪一个都可以,取决于你是否需要保持状态。

作为一般指导,如果出现以下情况,请考虑使用参与者模式来为您的问题或场景建模:

  • 您的问题space涉及大量(数千或更多) 小型、独立和隔离的状态和逻辑单元。
  • 您想使用不需要的单线程对象 来自外部组件的重要交互,包括查询 跨一组演员的状态。
  • 您的 actor 实例不会以不可预测的延迟阻止调用者 发布 I/O 个操作。

参考:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-introduction