Azure 服务总线 MessageReceiver.ReceivAsync returns 空

Azure Service bus MessageReceiver.ReceivAsync returns null

我有一个每 1 分钟触发一次的 azure 函数。该函数创建一个像这样的 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 return 似乎也为空。

增加 ReceiveAsync 的超时似乎没有帮助。

为什么有可用消息时 ReceiveAsync return 为空?

我找到了解决方案或解决方法。如果我将服务总线主题更改为不允许分区(它需要删除主题并重新创建),ReceiveAsync 总是 returns 在有可用消息时发送消息。

问题似乎与此问题有关