gpt4 book ai didi

Azure 服务总线队列与主题 (Pub/Sub)

转载 作者:行者123 更新时间:2023-12-03 05:36:03 25 4
gpt4 key购买 nike

需要一些架构指导。我有一组执行各种功能的无状态服务。我的架构允许每个服务的多个副本同时运行(因为它们是无状态的),从而使我能够:

  1. 根据需要进行扩展以处理更大的工作负载
  2. 具有容错能力(如果一项服务的一个实例发生故障,没有问题,因为会有其他服务来承担这项工作)。

但是,我不想重复工作。

如果服务 A,实例 1 已经承担了作业 ABC,我不希望服务 A,实例 2 承担相同的作业。因此,我可以通过使用 Azure 服务总线队列来避免这个问题。只有单个工作人员会从队列中获取特定项目,并且只有在工作人员未在设定时间内将其标记为完成时,才会将其重新分配给另一个工作人员。

那么主题(Pub/Sub)的合适用例是什么?似乎如果我拥有同一服务的多个副本,我必须依赖队列。是这样吗?

换个方式问,是否有一种方法可以在 Azure 服务总线或类似产品/服务中使用主题,但避免重复工作?此外,是否有一种方法可以锁定消息(对于当使用主题时,是否可以将该消息锁定到服务 A 的一个实例(这样服务 A 的其他实例就无法访问该消息),但该消息将广播到服务 B、服务、C等等?

最佳答案

is there a way to use Topics in Azure Service Bus or similar products/services but avoid duplication of work?

是的,有。基本上,您需要将每个订阅用作队列。您需要做的是定义适当的过滤器,以便将一种消息发送到单个订阅(这样它充当队列),并让多个监听器(在您的情况下是服务实例)仅监听特定的订阅。

Also, if there is a way to lock a message (for a short period of time) when using Topics, is it possible to lock that message to just one instance of Service A (so no other instances of Service A will have access to it) but the message will be broadcast to Service B, Service, C, etc.?

当然可以锁定消息。为此,您需要在Peek-Lock模式下获取消息。但是,如果涉及多个订阅者(服务),则只有一个订阅者能够锁定消息并访问它。对于其他订阅者,该消息将是不可见的。不能出现这样的情况:一个服务获取锁而其他服务仍然接收消息。

关于Azure 服务总线队列与主题 (Pub/Sub),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62453549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com