【问题标题】:Azure Service Bus - PeekBatchAsync returning less messages than expectedAzure 服务总线 - PeekBatchAsync 返回的消息少于预期
【发布时间】:2014-07-22 12:47:34
【问题描述】:

在 Azure 服务总线主题中,我订阅了超过 1000 条消息。这些消息由工作角色使用。 出于监控目的,我想查看前 10 条消息,以查看等待处理的消息类型。为了完成该任务,我创建了一个订阅客户端并调用了 PeekBatchAsync 方法。奇怪的行为是有时 PeekBatchAsync 返回少于 10 条消息(即 2 或 4 条消息)。

代码示例:

Dim subscriptionClient As SubscriptionClient = messagingFactory.CreateSubscriptionClient(topicName, subscriptionName)
Dim messages = Await subscriptionClient.PeekBatchAsync(10)

更多信息来阐明上下文:

  • 我确定订阅包含超过 1000 条消息
  • 主题是使用 EnablePartitioning = True 创建的
  • 我正在使用库 Microsoft.ServiceBus v. 2.3.4.0
  • 我正在使用会话
  • 大多数情况下,我收到的消息数量正确 (10),但有时收到的消息较少。我不知道复制问题的确切条件是什么

我的问题是:为什么有时该方法返回的消息少于预期?

【问题讨论】:

    标签: vb.net azure azureservicebus


    【解决方案1】:

    我猜 Azure-ServiceBus ReceiveBatch-method 的文档也适用于 PeekBatchAsync。基本上它说:最大。可能会返回消息数量(在您的情况下为 10),但不能保证。

    在应用采用两个参数的重载时,我体验到了更好的结果:(int messageCount, TimeSpan serverWaitTime),其中可以定义等待时间。

    【讨论】:

    • 不幸的是,PeekBatch/PeekBatchAsync 没有时间跨度参数过载,所以我无法尝试。也许应该更新 PeekBatch/PeekBatchAsync 的文档,因为即使订阅包含更多元素,也不能保证元素的数量。
    • @Daniele:尽管我使用TimeSpan 获得了更好的结果,但我收到的消息仍然比不时指定的要少。另外,默认情况下不保证消息的顺序!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多