【问题标题】:receiveMessages method with maxWaitTime not working as expected具有 maxWaitTime 的 receiveMessages 方法未按预期工作
【发布时间】:2021-08-14 07:53:30
【问题描述】:

我正在使用 azure 服务总线并使用 ServiceBusReceiverClient.receiveMessages(int maxMessages, Duration maxWaitTime) 方法从服务总线接收消息,我的用例是接收一批特定时间内的消息。但这并没有按预期工作它没有等待持续时间 maxWaitTime,它会在收到一条消息后立即开始处理消息。

下面是代码sn-p:

 ServiceBusReceiverClient receiver = new ServiceBusClientBuilder()
        .connectionString(connectionString)
        .receiver()
        .maxAutoLockRenewDuration(Duration.ofMinutes(1))
        .queueName("<<queue-name>>")
        .buildClient();
    while (true) {
        
        Iterator<ServiceBusReceivedMessage> iterator =  receiver.receiveMessages(10, Duration.ofMinutes(2)).iterator();
        while (iterator.hasNext()) {
            ServiceBusReceivedMessage serviceBusReceivedMessage = (ServiceBusReceivedMessage) iterator.next();
            System.out.println("received message is  ->"+serviceBusReceivedMessage.getBody());
            
        }
        
    }

它应该等待至少两分钟才能收到 10 条消息,但它会在几秒钟内开始处理只有一条消息。

【问题讨论】:

  • 这不是maxWaitTime 应该做的。 maxWaitTime 是接收方在超时前等待消息的最长时间。

标签: java azure azureservicebus servicebus messagebroker


【解决方案1】:

@Abhijit,

MaxWaitTime 是客户端在消息传递到客户端之前从服务总线等待的时间。当超过等待时间时,它会跳过特定消息。

我能想到的一种方法可以帮助您:

  • 检查活动消息计数是否超过 10。然后 继续阅读消息。

    Reference

    注意:您可能需要 Service Bus 管理客户端。

  • 如果消息数在 5 分钟内未达到 10 - 然后继续 提前阅读可用的消息。

【讨论】:

    最近更新 更多