为什么QueueClient.PeekBatch()和MessageReceiver.PeekBatch()不会回退您指定的消息数

bru*_*use 5 c# servicebus azure

这两个:

queueClient.PeekBatch(Convert.ToInt32(60));

还有这个:

messageReceiver.PeekBatch(Convert.ToInt32(60));

不要"完全"工作.它们返回的数量较少,而我必须循环"泵"这些方法,直到我知道我们使用的消息数量:

var count = queue.MessageCountDetails.ActiveMessageCount;

我缺少什么设置,为什么Azure如此吝啬并且不允许我退回,所有60条消息 - 我知道那些 - 立刻?

UK-*_*-AL 3

好吧,根据天蓝色样本,您传入的数字是上限,而不是完全匹配。因此,您只能依赖它返回该数量或更少的消息。

https://github.com/Azure-Samples/azure-servicebus-messaging-samples/tree/master/MessageBrowse#using-peekbatch

“我们传递给 PeekBatchAsync 的计数 20 是我们想要获取的消息数量的上限。该服务可以返回任意数量的消息,在本例中最多为 20 条,但如果消息是最新读取序列号之后可用”

Azure 服务总线的批处理通常仅用作性能增强,以避免一次返回一条消息的开销。在内部,它可能已经发现返回更小但更多的批次性能更高。使用精确数量进行批处理不是您的程序逻辑应该依赖的东西,我只是真正使用它来提高应用程序性能,因为允许比单个查看更多的吞吐量。

一批中返回的数据量似乎也适用于您。

“一次批量调用最多返回 256 kByte 的累积消息大小。”