【问题标题】:Get the message from Azure Service Bus whenever needed在需要时从 Azure 服务总线获取消息
【发布时间】:2019-01-24 05:29:50
【问题描述】:

是否可以在我的应用程序需要时检索消息?

我只需要在队列中有消息时不要声明任何接受消息的句柄(我可以使用 QueueClient 来实现),因为我想一次处理一条消息。一旦成功处理了一条消息,那么我只需要来自队列的另一条消息。

Service Bus 可以做到这一点吗?

提前致谢!

【问题讨论】:

  • 你能分享一些代码吗?我想您可以使用 Azure 触发器。你可以在这里阅读它们docs.microsoft.com/en-us/azure/azure-functions/…
  • @Shahid 我的问题是我的队列是会话队列,所以我不能使用函数,因为它现在不支持处理基于会话的消息。我正在使用“client.RegisterSessionHandler”处理程序获取消息,它提供队列中可用的所有消息。

标签: c# azure azureservicebus


【解决方案1】:

服务总线具有“消息延迟”这个属性,您可以将消息延迟到您完成当前的处理吗?

消息延迟 当队列或订阅客户端接收到它愿意处理但由于应用程序内部的特殊情况当前无法处理的消息时,实体可以选择defer retrieval of the message 稍后再处理。消息保留在队列或订阅中,但被搁置一旁。

【讨论】:

    【解决方案2】:

    RegisterSessionHandler 有一个属性MessageWaitTimeout,它允许您等待接收消息。

    如果你确定处理消息的时间,那么你可以指定这个属性,它会给你足够的时间来处理它。下一条消息只会在指定时间后收到。

    使用它可以延迟使用 RegisterSessionHandler 检索下一条消息。

    【讨论】:

    • 根据文档“表示会话泵应该等待接收会话消息的最长时间。如果在指定时间内没有收到消息,泵将关闭该会话并尝试从一个不同的会话”。在我的例子中,有多个线程和单个 sessionId。因此,不断地在处理程序上获取消息。因此,这个属性没有用。
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-03
    • 1970-01-01
    相关资源
    最近更新 更多