我是服务结构的新手。服务结构,什么微服务最适合从服务总线进行连续轮询
我们在Azure服务总线上有一个队列。我想连续从服务结构中的队列中拉出,处理消息(执行一些业务逻辑),并在数据库中保存一些数据,然后从队列中删除消息。
微服务应该每隔几秒钟检查队列以监视一条新消息。
我的问题是,什么是预期的微服务将提取数据,处理一些业务逻辑,然后保存到数据库。是无状态服务还是可靠演员
我是服务结构的新手。服务结构,什么微服务最适合从服务总线进行连续轮询
我们在Azure服务总线上有一个队列。我想连续从服务结构中的队列中拉出,处理消息(执行一些业务逻辑),并在数据库中保存一些数据,然后从队列中删除消息。
微服务应该每隔几秒钟检查队列以监视一条新消息。
我的问题是,什么是预期的微服务将提取数据,处理一些业务逻辑,然后保存到数据库。是无状态服务还是可靠演员
(编辑:解释的问题有错在先)
我会说这是个人喜好的问题,你选择哪种模式。
您可以在所有节点上运行无状态服务,接收消息并在工作线程上处理它们。
由于Single Entry模型(限制多线程选项),Actor较少能够单手处理大量消息。但演员可以进来数字。你可以让许多Actor来监听消息。你需要确保那些演员成为&但仍然活着。
原来的答案:
这NuGet包做到这一点:https://www.nuget.org/packages/ServiceFabric.ServiceBus.Services 它支持队列,主题,配料和会话。
。看起来它不解决或回答Adam的问题。 – cassandrad
@LoekD,在提交这篇文章之前,我已经在GitHub上看到了你的解决方案。但是,我的问题是特定于我应该使用的微服务的类型。您的解决方案看起来像Fabric上的Service Bus实现,而不是使用Azure SB的方式。 – Adam
我对这两个问题都表示歉意,更改回答 – LoekD
您可以使用任何服务。无状态或状态。真的不重要。 在我看来,你可以做如下:
一旦你有了这个,在你的服务代码中,你可以使用StatefulService的“CreateServiceReplicaListeners”覆盖或者StatelessService的“CreateServiceInstanceListeners”。
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new[] { new ServiceReplicaListener(context => new ServiceBusCommunicationListener(context)) };
}
使用'OpenAsync'从队列中连续选择是个不错的主意。应该调用一次OpenAsync进行初始化,然后释放。最好使用'RunAsync'从队列中进行轮询,然后在'CloseAsync'中取消初始化队列或任何其他资源。 – cassandrad
我的问题更多的是服务的类型而不是实现。但是,感谢您强调这一点。 – Adam
@Adam作为Gopi提到的,你可以使用任何类型 - 它不会影响你,但是,当然,最好使用无状态服务,因为你不需要在SF中存储任何数据,不是吗? – cassandrad
您的问题空间似乎适合有状态或无状态模型。根据您是否需要维护状态,任何一个都可以。
作为一般性的指导,考虑到演员的模式来模拟您的问题或情况下,如果:
参考:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-introduction
你真的需要一个微服务?你可以使用webjob,它会更容易。如果你的微服务只是由一个队列触发的,那真的是一个微服务? – Thomas
@Thomas是的,网络工作可以解决这个问题,但它会使架构复杂化,因为系统的其他部分已经在微服务上,而不仅仅是这个组件,所以使用Fabric中的某些东西更有意义,因为它是一个与我们正在寻找的东西密切相配。 – Adam