Azure服务总线MessageReceiver.ReceivAsync返回null

时间:2018-11-13 12:41:04

标签: azure azure-functions azureservicebus azure-servicebus-topics

我具有每1分钟触发一次的天蓝色功能。该函数创建像这样的MessageReceiver

var messageReceiver = new MessageReceiver(serviceBusConnectionString, entityPath, ReceiveMode.PeekLock, null, 0);

订阅的锁定持续时间为1分钟。 然后,它尝试从订阅中获取多达100条消息,如下所示:

var allMessages = new List<Message>();
Message message;

do {
    message = await messageReceiver.ReceiveAsync(TimeSpan.FromSeconds(2));
    if (message != null) allMessages.Add(message);
} while (message != null && allMessages.Count() < 100);

使用messageReceiver.CompleteAsync完成消息处理后,使用messageReceiver.CloseAsync()关闭messageReceiver。

函数第一次运行时,它从订阅中最多获取100条消息,但是在下次运行时,无论订阅中可用的消息数为多少,它都仅提取0或1条消息(Service Bus Explorer显示那里> 10订阅中的邮件)。因此,即使有可用消息,ReceiveAsync似乎也返回null。

增加ReceiveAsync的超时时间似乎无济于事。

当有可用消息时,为什么ReceiveAsync返回null?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案或解决方法。如果我将服务总线主题更改为不允许分区(它需要删除该主题并再次创建),则在有可用消息时,ReceiveAsync总是返回一条消息。

问题似乎与此问题Odd Behavior of Azure Service Bus ReceiveBatch()

有关