并非所有消息都来自 Azure 服务总线队列
Not all messages peeked from Azure Service Bus queue
我有一个 Azure 服务总线队列,其死信子队列中有 236 条消息。我知道这是因为 Azure 门户和服务总线资源管理器向我显示了那个数字。
我在 LINQPad 中编写了以下代码来检索所有 236 条消息并检查它们。然而,它只 returns 236 条消息中的 136 条。
我正在使用 Microsoft.Azure.ServiceBus nuget 包的 v5.1.0。
关于为什么我没有收到所有 236 条消息有什么想法吗?
const string queueName = "the-queue-name";
const string serviceBusConnectionString = "Endpoint=...";
var receiver = new MessageReceiver(serviceBusConnectionString, EntityNameHelper.FormatDeadLetterPath(queueName));
var receivedMessages = await receiver.PeekAsync(300);
Console.WriteLine($"Received [{receivedMessages.Count()}] dead-letters");
Peek 操作无法检索您指定的确切计数可能有两个原因:
一个原因是邮件集合的总大小超过了最大大小 256 KB。另一个原因是,如果队列或主题的 EnablePartitioning 属性 设置为 true,分区可能没有足够的消息来完成请求的消息数。
所以一般来说,我建议你重复使用 Peek
操作,可能使用循环。假设您在执行 PeekAsync(236)
时收到了 236 条消息中的 136 条。在这种情况下,您必须记下您实际收到的计数并调用 PeekAsync(236 - returned count)
,它具有减去值的参数。 returned count
应在每次获得结果时递增。
您正在使用的客户端对象会记住最后一次查看的序列号,然后它会继续检索下一组消息。这样您就可以检索所有消息。
速览消息永远无法保证准确检索到您请求的消息数。这是您将收到的最大消息数。在最新的 SDK(版本 7)中,传递给 PeekMessagesAsync
方法的参数称为 maxMessages
并记录为:
The maximum number of messages that will be fetched.
一个常见的解决方案确实是循环,直到您获得所需数量的消息或在代码允许的情况下对不同大小的批次进行操作。
我有一个 Azure 服务总线队列,其死信子队列中有 236 条消息。我知道这是因为 Azure 门户和服务总线资源管理器向我显示了那个数字。
我在 LINQPad 中编写了以下代码来检索所有 236 条消息并检查它们。然而,它只 returns 236 条消息中的 136 条。
我正在使用 Microsoft.Azure.ServiceBus nuget 包的 v5.1.0。
关于为什么我没有收到所有 236 条消息有什么想法吗?
const string queueName = "the-queue-name";
const string serviceBusConnectionString = "Endpoint=...";
var receiver = new MessageReceiver(serviceBusConnectionString, EntityNameHelper.FormatDeadLetterPath(queueName));
var receivedMessages = await receiver.PeekAsync(300);
Console.WriteLine($"Received [{receivedMessages.Count()}] dead-letters");
Peek 操作无法检索您指定的确切计数可能有两个原因:
一个原因是邮件集合的总大小超过了最大大小 256 KB。另一个原因是,如果队列或主题的 EnablePartitioning 属性 设置为 true,分区可能没有足够的消息来完成请求的消息数。
所以一般来说,我建议你重复使用 Peek
操作,可能使用循环。假设您在执行 PeekAsync(236)
时收到了 236 条消息中的 136 条。在这种情况下,您必须记下您实际收到的计数并调用 PeekAsync(236 - returned count)
,它具有减去值的参数。 returned count
应在每次获得结果时递增。
您正在使用的客户端对象会记住最后一次查看的序列号,然后它会继续检索下一组消息。这样您就可以检索所有消息。
速览消息永远无法保证准确检索到您请求的消息数。这是您将收到的最大消息数。在最新的 SDK(版本 7)中,传递给 PeekMessagesAsync
方法的参数称为 maxMessages
并记录为:
The maximum number of messages that will be fetched.
一个常见的解决方案确实是循环,直到您获得所需数量的消息或在代码允许的情况下对不同大小的批次进行操作。