Dee*_*pak 5 c# azure azureservicebus azure-servicebus-queues
我从 Microsoft文档中了解到,在第一次 Peek() 操作期间,任何一个可用的消息代理都会响应并发送其最旧的消息。然后在随后的 Peek() 操作中,我们可以遍历分区以查看每条具有增加序列号的消息。
我的问题是,在第一次 Peek() 操作期间,我将从任何第一个响应的分区中收到一条消息。是否可以保证我可以查看队列中的所有消息?
以更简单的方式,有三个分区:分区“A”有 10 条消息,序列号从 1 到 10。分区“B”有 10 条消息,序列号从 11 到 20。分区“C”有 10 条消息,序列号从 21 到 30 的数字。
现在,如果我执行 Peek() 操作,如果分区“B”首先响应,我将得到的第一条消息是序列号为 11 的消息。下一个 peek 操作将查找序列号递增的消息。我不会错过来自分区“A”的消息,它的序列号为 1-10,因为它总是搜索递增的序列号,所以窥视操作永远无法到达?
更新
QueueClient queueClient = messagingFactory.CreateQueueClient("QueueName", ReceiveMode.PeekLock);
BrokeredMessage message = null;
while (iteration < deadLetterMessageCount)
{
message = queueClient.Peek(); // According to docs, Peeks the oldest message from any responding broker, and next iterations peek the message with incremented sequence number
if (message == null)
break;
Console.WriteLine(message.SequenceNumber);
}
Run Code Online (Sandbox Code Playgroud)
是否可以保证我可以使用上面的代码段浏览分区队列的所有消息?
无法保证返回的消息是所有分区中最旧的消息。
因此,这取决于哪个消息代理首先响应,并且将显示该分区中最旧的消息。在您的示例中,没有关于哪个分区首先响应的一般规则,但可以保证首先显示该分区中最旧的消息。
如果要按序列号检索消息,请使用重载的 Peek 方法 Peek(Sequencenumber),请参阅: https: //learn.microsoft.com/en-us/azure/service-bus-messaging/message-browsing