【发布时间】:2021-02-07 04:35:27
【问题描述】:
我从 Microsoft docs 了解到,在第一次 Peek() 操作期间,任何一个可用的消息代理都会响应并发送其最旧的消息。然后在后续的 Peek() 操作中,我们可以遍历分区以查看每条增加序列号的消息。
我的问题是,在第一次 Peek() 操作期间,我会从任何第一个响应的分区中收到一条消息。是否可以保证我可以查看队列中的所有消息?
以更简单的方式,有三个分区: 分区“A”有 10 条消息,序列号从 1 到 10。 分区“B”有 10 条消息,序列号从 11 到 20。 分区“C”有 10 条消息,序列号从 21 到 30。
现在,如果我执行 Peek() 操作,如果分区“B”首先响应,我将得到的第一条消息是序列号为 11 的消息。下一个 peek 操作将查找序列号递增的消息。我不会错过来自分区“A”的消息,它的序列号为 1-10,因为它总是搜索递增的序列号,所以 peek 操作永远无法到达?
更新
QueueClient queueClient = messagingFactory.CreateQueueClient("QueueName", ReceiveMode.PeekLock);
BrokeredMessage message = null;
while (iteration < messageCount)
{
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);
iteration++;
}
上面的sn-p能保证我可以浏览一个分区队列的所有消息吗?
【问题讨论】:
标签: c# azure azureservicebus azure-servicebus-queues