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

时间:2017-04-27 16:17:50

标签: c# azure servicebus

这两个:

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

而且:

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

不要“完全”工作。它们返回的数量较少,而我必须循环“抽取”这些方法,直到我知道我们使用的消息数量为止:

var count = queue.MessageCountDetails.ActiveMessageCount;

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

1 个答案:

答案 0 :(得分:2)

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

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

"我们传入PeekBatchAsync的20个数量是我们想要获得的消息数量的上限。该服务可以返回任意数量的消息,在这种情况下最多20个消息,但如果消息在最新的读取序列号之后可用,则将返回至少一条消息"

对天蓝色服务总线进行批处理通常仅用作性能增强,以避免一次返回一个消息的开销。它可能在内部 已经得出结论,返回更小但更多批次的性能更高。使用精确数量进行批处理不是程序逻辑应该依赖的, 我只是真的用它来提高应用程序的性能,因为它允许更多的吞吐量而不是个人偷看。

似乎也限制了一批中可能适用于您的数据量。

"在一次批量调用中,最多将返回256 kByte的累积邮件大小。"