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 在有可用消息时发送消息。
问题似乎与此问题有关
我有一个每 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 在有可用消息时发送消息。
问题似乎与此问题有关