c# - 为什么 QueueClient.PeekBatch() 和 MessageReceiver.PeekBatch() 不拉回您指定的消息数量

标签 c# azure servicebus

这两个:

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

还有这个:

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

不要“完全”工作。它们返回较小的数量,相反,我必须在循环中“泵送”这些方法,直到我知道我们使用的消息数量:

var count = queue.MessageCountDetails.ActiveMessageCount;

我缺少哪些设置,为什么 Azure 如此小气,不允许我撤回所有 60 条消息 - 我知道它们都在那里 - 一次?

最佳答案

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

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

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

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

在一批中返回的数据量似乎也有限制,这可能适用于您。

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

关于c# - 为什么 QueueClient.PeekBatch() 和 MessageReceiver.PeekBatch() 不拉回您指定的消息数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663054/

相关文章:

c# - Typography.Capitals 不适用于 Windows 7

c# - 如何用Thread移动PictureBox?

c# - 如何快速删除然后将多个记录插入数据库

azure - 自动过期孤立订阅 (Azure ServiceBus Messaging SubscriptionClient)

c# - CORBA 的 ASP.Net WebAPI 替代品?

azure - 在 Github Actions 中使用 Powershell 的输出

azure - Azure 免费试用订阅中的 "Remaining Credits"

php - 尝试获取访问 token 请求 Azure AD 时 invalid_grant

Azure 服务总线 - SubscriptionClient.AcceptMessageSession() 与 SubscriptionClient.BeginAcceptMessageSession()

docker - Azure 服务总线 - 当应用程序位于 Docker 容器中时出现 MessageLockLostException,否则工作正常