如果接收 Azure 函数停止,ServiceBus 如何保证 FIFO 顺序?

How can a ServiceBus guarantee the FIFO order if the receiving Azure Function stopped?

我有一个将消息推送到服务总线的客户端。我 在另一端有一个绑定到服务总线的 Azure 函数,以便在服务总线中发布消息时自动调用它。

(Client) ---Message---> (Service Bus) ---Message---> (Azure Function)

服务总线保证队列中的第一条消息最先出来(FIFO)。

现在,我假设在一定的负载下,将启动几个 Azure Functions 来处理来自服务总线的消息。

假设其中一个 Azure Functions 崩溃(无论出于何种原因)并且无法处理消息。

问题

服务总线是否首先将未处理的消息放回原处,这是否意味着,从技术上讲,即使这条消息是队列中的第一条消息,它也确实可以在更新的消息之后处理?

您需要正确设置SessionID以保证顺序。对于会话感知实体,此应用程序定义的值指定消息的会话从属关系。具有相同会话标识符的消息会受到摘要锁定并启用精确的按顺序处理和多路分解。对于不了解会话的实体,该值将被忽略。请参阅消息会话。

https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions