Service Fabric,什么微服务最适合从服务总线进行连续轮询
Service Fabric, What Microservices is best intended for continuous polling from Service Bus
我是 Service Fabric 的新手。
我们在 Azure 服务总线上有一个队列。我想在我的 Service Fabric 中不断地从队列中提取消息,处理消息(执行一些业务逻辑)并在数据库中保存一些数据,然后从队列中删除消息。
微服务应每隔几秒检查一次队列以监视新消息。
我的问题是,将提取数据、处理一些业务逻辑然后保存到数据库的预期微服务是什么。它是无状态服务还是可靠参与者
你可以使用任何一个。无状态或有状态。是不是应该真的很重要。
在我看来,您可以执行以下操作:
- 创建自定义侦听器说 "ServiceBusCommunicationListener" 从 ICommunicationListener 派生。在ICommunicationListener的"public Task OpenAsync(CancellationToken cancellationToken)"方法中,可以编写代码访问服务总线队列。
- 对于服务总线队列读取,可以使用"Microsoft.ServiceBus.Messaging.SubscriptionClient"并使用它的"OnMessageAsync"方法来连续接收消息。
一旦你有了这个,在你的服务代码中,你可以使用 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
我是 Service Fabric 的新手。
我们在 Azure 服务总线上有一个队列。我想在我的 Service Fabric 中不断地从队列中提取消息,处理消息(执行一些业务逻辑)并在数据库中保存一些数据,然后从队列中删除消息。
微服务应每隔几秒检查一次队列以监视新消息。
我的问题是,将提取数据、处理一些业务逻辑然后保存到数据库的预期微服务是什么。它是无状态服务还是可靠参与者
你可以使用任何一个。无状态或有状态。是不是应该真的很重要。 在我看来,您可以执行以下操作:
- 创建自定义侦听器说 "ServiceBusCommunicationListener" 从 ICommunicationListener 派生。在ICommunicationListener的"public Task OpenAsync(CancellationToken cancellationToken)"方法中,可以编写代码访问服务总线队列。
- 对于服务总线队列读取,可以使用"Microsoft.ServiceBus.Messaging.SubscriptionClient"并使用它的"OnMessageAsync"方法来连续接收消息。
一旦你有了这个,在你的服务代码中,你可以使用 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