【问题标题】:Azure Service Bus Queue grouped messagesAzure 服务总线队列分组消息
【发布时间】:2019-12-24 16:12:44
【问题描述】:

我有一个 web api 应用程序,它执行不同类型的操作一个域实体,称为Application。 “复制”、“更新”、“回收”、“恢复”等操作。

此操作需要按应用程序按先进先出顺序执行,而不是随机或同时执行。但是,它可以同时处理两个 Action,只要它们用于两个单独的应用程序即可。

是某种队列,但不是所有请求的大队列,而是数据库中每个应用程序的操作队列。

知道了这一点,我认为azure service bus queue 是这个场景的一个很好的解决方案。

但是,我现在能想到的解决方案是以编程方式为数据库中的每个应用程序创建一个队列,然后开始监听该队列。

是否可以根据过滤器从队列中获取消息? (使用先进先出原则)所以我必须只订阅一个队列? (而不是为每个应用程序设置一个队列——这很难维护)

【问题讨论】:

  • 我回答你的问题了吗?
  • @kspearrin 感谢您的回答。我将不得不做一些测试,看看它是否有效。据我所知,订阅允许我过滤队列,但没有任何过滤条件。我只需要一个订阅,它会根据它们的 Application Id 属性分块接收队列
  • 除非我误解了你,否则你应该创建多个订阅(针对每个应用程序)到基于此应用程序 ID 标头过滤的主题。然后只需在发布到主题的每条消息中包含应用程序 ID。
  • 这是我试图避免的。每个应用程序都有订阅更难管理,例如,如果删除应用程序,则需要删除订阅。或者当 Web 服务器启动时,我需要获取所有应用程序 ID 并为每个应用程序创建订阅

标签: azure message-queue azureservicebus azure-servicebus-queues


【解决方案1】:

你想要的是Azure Service Bus Topics/Subscriptions

订阅允许您使用消息头上的SqlFilter 过滤发布到主题的消息。

上面链接的文章应该提供足够的例子来满足您的需求。

【讨论】:

    【解决方案2】:

    我想你可以使用Sessions 来解决这个问题。

    我刚刚看到这篇非常清晰的文章:https://dev.to/azure/ordered-queue-processing-in-azure-functions-4h6c,它详细解释了 Azure 服务总线队列会话的工作原理。

    简而言之:通过在消息上定义 SessionId,您可以强制在会话中对处理进行排序,缺点是队列的多个使用者之间的会话中的所有消息都不会并行化。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2017-11-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2016-02-06
      • 2017-04-22
      • 1970-01-01
      相关资源
      最近更新 更多