繁体   English   中英

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

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

我是Service Fabric的新手。

我们在Azure Service Bus上有一个队列。 我想连续从Service Fabric中的队列中提取消息,处理消息(执行一些业务逻辑)并将某些数据保存在DB中,然后从队列中删除消息。

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

我的问题是, 将提取数据,处理一些业务逻辑然后保存到数据库的预期微服务什么? 是无国籍服务还是可靠演员

(编辑:解释错误的问题较早)

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

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

由于单入口模型(限制多线程选项),Actor不能单手处理大量消息。 但是演员可以有很多。 您可以让许多Actor收听消息。 您需要确保那些演员成为并保持活着。


原始答案:

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

您的问题空间似乎适合有状态或无状态模型。 根据您是否需要维护状态,哪种都可以。

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

  • 您的问题空间涉及大量(成千上万个)小型,独立且隔离的状态和逻辑单元。
  • 您希望使用不需要与外部组件进行大量交互(包括查询一组参与者的状态)的单线程对象。
  • 您的actor实例不会通过发出I / O操作而以不可预测的延迟阻止调用者。

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

您可以使用任何一个。 无状态或全状态。 是应该没关系的。 我认为您可以执行以下操作:

  1. 创建一个自定义侦听器,说它是从ICommunicationListener派生的“ ServiceBusCommunicationListener”。 在ICommunicationListener的“公共任务OpenAsync(CancellationToken cancelleToken)”方法中,可以编写代码以访问服务总线队列。
  2. 对于读取服务总线队列,可以使用“ Microsoft.ServiceBus.Messaging.SubscriptionClient”并使用其“ OnMessageAsync”方法连续接收消息。
  3. 一旦有了这些,就可以在服务代码中使用StatefulService的“ CreateServiceReplicaListeners”替代或StatelessService的“ CreateServiceInstanceListeners”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM