我有一个web api应用程序,它执行一个名为Application
的域实体的不同类型的操作。 “复制”,“更新”,“回收”,“还原”等操作
此操作需要按先进先出顺序按应用程序执行,而不是随机或同时执行。但是,它可以同时处理两个操作,只要它们用于两个单独的应用程序。
是某种队列,但不是所有请求的大队列,而是数据库中每个应用程序的一系列操作。
知道这一点,我认为azure service bus queue对于这种情况来说是一个很好的解决方案。
但是,我现在能想到的解决方案是以编程方式为数据库中的每个Application创建一个队列,并开始侦听该队列。
是否可以根据过滤器从队列中获取消息? (使用FIFO原理)所以我只需要订阅一个队列? (而不是每个应用程序都有一个队列 - 这很难维护)
答案 0 :(得分:1)
你想要的是Azure Service Bus Topics/Subscriptions。
订阅允许您使用邮件标题上的SqlFilter
过滤发布到主题的邮件。
上面链接的文章应该提供足够的示例来满足您的需求。
答案 1 :(得分:0)
我认为您可以使用Sessions解决此问题。
我刚刚看过这篇非常清晰的文章:https://dev.to/azure/ordered-queue-processing-in-azure-functions-4h6c,其中详细解释了Azure Service Bus Queue会话如何工作。
简而言之:通过在消息上定义SessionId,您可以强制会话中的处理顺序,缺点是队列中多个使用者之间的会话中的所有消息都不会并行化。