nservicebus - 将 NServiceBus 与 Azure Service Fabric 结合使用

标签 nservicebus azure-service-fabric

我已经阅读了 StackOverflow 上有关在 SF 上使用 NSB 的其他问题以及 github 上的示例(已过时),但我仍然不确定如何为此平台正确配置 NServiceBus。

我正在寻求设置仅发送发布/订阅工作流程。通过我的研究,我无法确定如何进行设置,以便特定服务只有一个实例响应该消息。

例如:在标准 5 个节点上运行 3 个服务(因此假设这 3 个服务各有 5 个实例)。

  1. 现有负载均衡器将 http 请求路由到服务 A 的特定实例。
  2. 服务 A 发布“OrderComplete”事件
  3. 服务 B 和 C 都订阅该事件。
  4. 如何确保只有服务 B 和 C 的一个实例响应,而不是服务 B 的所有 5 个实例和服务 C 的所有 5 个实例响应?

所有服务目前都是无状态服务。

我正在考虑使用 AzureServiceBus 或 AzureStorageQueue 传输。

最佳答案

无状态方法很好。您不需要使用单个分区进入有状态服务,除非您想为您的服务利用可靠的集合。但让我们看看这两个选项

使用无状态服务

可以拥有多个服务实例。是的,他们都会创建订阅。我认为这正是你想要的 - competing consumers 。您拥有的服务实例越多,您将获得更多的吞吐量,即处理更多的消息。

What I can't determine through my research is how to set this up so that only one instance of a particular service responds to the message.

由于竞争消费者运输的性质(ASBASQ),这将自动发生。

使用有状态服务

对于有状态服务,您需要非常小心。是的,您可以为每个服务使用一个分区,从而让一个主副本处理您的消息。但是,可以说,您没有利用集群资源来并发处理许多消息,从而浪费了集群资源。如果您决定对服务进行分区,那么您将无法使用可靠集合,因为服务的副本在它们之间共享可靠集合。如果您选择使用没有可靠集合的分区有状态服务,那么您最好使用无状态对应服务。

注意:NSB 将提供对运行有状态服务的支持,以利用可靠的集合来满足持久性需求,但即便如此,也需要通过分区来满足业务需求。如果您没有这样的需求,我建议坚持使用无状态服务和 Azure Storage persistence .

关于nservicebus - 将 NServiceBus 与 Azure Service Fabric 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947570/

相关文章:

visual-studio - 错误: The project output folder is being used by a Service Fabric application

azure-service-fabric - 在组托管服务帐户 (gMSA) 下运行 Service Fabric 应用程序

msmq - nServiceBus、公共(public)交通、Rhino 服务总线、其他?

redis - 使用 Redis MQ 的 CQRS

nservicebus - Sagas 可以在 Unobtrusive 模式下使用吗?

azure-service-fabric - Azure 中的 Service Fabric 群集只能通过 VPN 网关访问

security - nServiceBus 和安全 : what is best practise?

nservicebus - 使用服务总线从由 Web 应用程序组成的服务层发布事件

c# - 为参与者 '{actorName}' 获取基于回合的并发锁在 {time} 后超时

visual-studio - 防止 Visual Studio 关闭服务结构服务