gpt4 book ai didi

.net - 并非所有消息都是从 Azure 服务总线队列中获取的

转载 作者:行者123 更新时间:2023-12-02 23:04:39 25 4
gpt4 key购买 nike

我有一个 Azure 服务总线队列,死信子队列中有 236 条消息。我知道这一点是因为 Azure 门户和服务总线资源管理器向我显示了该数字。

我在 LINQPad 中编写了以下内容来检索所有 236 条消息并检查它们。然而,它只返回 236 条消息中的 136 条。

我使用的是 Microsoft.Azure.ServiceBus nuget 包 v5.1.0。

对于为什么我没有收到全部 236 条消息有什么想法吗?

const string queueName = "the-queue-name";
const string serviceBusConnectionString = "Endpoint=...";

var receiver = new MessageReceiver(serviceBusConnectionString, EntityNameHelper.FormatDeadLetterPath(queueName));
var receivedMessages = await receiver.PeekAsync(300);

Console.WriteLine($"Received [{receivedMessages.Count()}] dead-letters");

最佳答案

Peek 操作无法检索您指定的准确计数可能有两个原因:

原因之一是消息集合的聚合大小超过了最大大小 256 KB。另一个原因是,如果队列或主题的 EnablePartitioning 属性设置为 true,分区可能没有足够的消息来完成请求的消息数量。

因此,通常我建议您重复使用 Peek 操作,可能使用循环。假设您在执行 PeekAsync(236) 时收到了 236 条消息中的 136 条。在这种情况下,您必须记下实际收到的计数并调用 PeekAsync(236 - returned count),其中包含带有减去值的参数。 返回计数应在每次获得结果时递增。

您使用的客户端对象会记住最后查看的序列号,然后继续检索下一组消息。这样您就可以检索所有消息。

关于.net - 并非所有消息都是从 Azure 服务总线队列中获取的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65428377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com