我对 Azure服务总线队列较新,并且正在构建一个项目,该项目需要按照消息到达的顺序(FIFO)处理队列中的消息。
使用Microsoft的文档,我能够弄清楚那部分。据我了解,我需要为队列打开会话吗?
我正在努力确定要对队列执行以下一组有序任务的最佳方法/服务堆栈。
首先,我们假设我们有一个基于FIFO的服务总线队列,其中有 n 条消息。我怎么可能:
我想也许 Logic App 可能会帮助我实现我试图做的事情。一切似乎直截了当直到#4。我无法弄清楚如何使用逻辑应用程序1.等待IoT中心确认 Cloud-to-Device 消息已发送或已过期,然后等待2.不要处理该应用中的下一条消息。排队直到收到IoT中心确认并且,我已将当前队列消息标记为已完成。
请注意:我之所以如此具体,是因为接收到传出的IoT中心C2D消息的设备关心订单。如果他们接收到的邮件混乱,则将导致该过程中断。
任何建议都将不胜感激。
答案 0 :(得分:1)
带有会话的Azure服务总线队列可用于实现消息的有序处理。
从这个问题中,我可以理解,只有在从IOT集线器收到确认后,才应删除来自服务总线队列的消息。
我可以感觉到此流程可能发生的问题。
首先,您需要了解Service Bus Queue中的lock duration
属性。根据设置为此属性的值,邮件将被锁定x分钟或几秒钟。每当从队列接收到一条消息时,将对该消息应用锁定。因此,该消息在x分钟或几秒钟内将无法用于任何其他接收者。 Complete
操作应在锁过期之前进行。一旦锁定过期,该消息将可供其他接收者处理。对于您而言,同一个Azure函数有可能再次接收到消息(导致重复)
可以为锁定持续时间属性设置的最大值为5分钟。
因此,如果您确定IOT集线器会在5分钟内响应,则可以继续执行此操作。尽管如此,仍然没有任何选项可以让函数知道何时处理下一条消息。