为什么Azure Logic;当队列中收到消息时(peek lock)"&引用;“下一个可用”;要等这么久才能收到队列消息?

为什么Azure Logic;当队列中收到消息时(peek lock)"&引用;“下一个可用”;要等这么久才能收到队列消息?,azure,azure-logic-apps,azure-servicebus-queues,Azure,Azure Logic Apps,Azure Servicebus Queues,我的设置: 我已创建启用会话的Azure服务总线队列。 锁定持续时间=1分钟 我已经创建了一个Azure Logic应用程序,其触发器为“当队列中收到消息时(peek lock)” 会话id=下一个可用的会话id 间隔=15,频率=秒 如果我的Azure Logic App中的步骤成功,我将完成队列中的消息,否则我将死信队列中的消息 我的结果: Azure Logic应用程序一次拾取一条队列消息并对其进行处理,但在拾取下一条消息之前,会等待整个锁定持续时间(在我的情况下,为1分钟)

我的设置:

  • 我已创建启用会话的Azure服务总线队列。
    • 锁定持续时间
      =
      1分钟
  • 我已经创建了一个Azure Logic应用程序,其触发器为“当队列中收到消息时(peek lock)”
    • 会话id
      =
      下一个可用的会话id
    • 间隔
      =
      15
      频率
      =
    • 如果我的Azure Logic App中的步骤成功,我将
      完成队列中的消息
      ,否则我将
      死信队列中的消息
我的结果:

  • Azure Logic应用程序一次拾取一条队列消息并对其进行处理,但在拾取下一条消息之前,会等待整个
    锁定持续时间
    (在我的情况下,为1分钟)
  • 注意:当我将会话id设置为特定会话id时,它不会等待,而是立即处理消息
我的问题:

  • 我希望Azure Logic应用程序在完成
    会话id
    =
    下一个可用时立即处理更多队列消息。这可能吗?我是否缺少一个设置来告诉Azure Logic应用程序不要等待整个锁定期

您的邮件是否具有相同的会话ID

在这种情况下,我认为您的逻辑应用程序持有会话锁,因此您需要使用“关闭队列中的会话”任务

如果您有多封具有相同SessionId的邮件,根据我的简单测试,在接收下一封具有相同SessionId的邮件之前,它似乎会将会话锁定一分钟。关闭会话会立即处理同一会话中的下一封邮件


我在生产使用中也遇到过类似的情况,我必须等待一段时间,然后将具有相同SessionId的所有消息拉到一起,但是如果有多个会话正在进行,它可以很好地运行并发逻辑应用程序,这在我的测试设置中也是一样的。

啊,很好的建议!是的,队列中的多条消息都具有相同的会话id。我将体验一下我在查找有关“关闭队列中的会话”实际作用的文档时遇到了一些困难。它是否只是说客户端将断开连接(及其锁)在会话上,还是意味着队列上具有该会话id的剩余项目将被删除(可能未处理)?换句话说,关闭会话是否仅适用于客户端或队列本身?再次感谢您的响应!在完成一些实验后,它显示为“关闭队列中的会话”“应用于客户端,而不是队列。对我来说,这是一个误导性的名字。但是,您的解决方案解决了我的问题,现在Logic应用程序在完成其步骤后立即拾取队列中的下一项。谢谢