当前位置: 首页 > 知识库问答 >
问题:

并非所有从Azure服务总线队列中窥视的消息

阴靖
2023-03-14

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

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

我正在使用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");

共有2个答案

周浩博
2023-03-14

偷看邮件永远不能保证准确检索到您请求的邮件数量。这是您收到的最大邮件数。在最新的SDK(版本7)中,传递到peekMessagesSync方法中的参数称为maxMessages,并记录为:

将获取的最大消息数。

一个常见的解决方案实际上是循环,直到您获得所需数量的消息,或者如果代码允许,对不同大小的批进行操作。

陶胤
2023-03-14

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

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

所以一般来说,我建议您反复使用Peek操作,可能使用循环。假设您在执行peek async(236)时收到236条消息中的136条。在这种情况下,您必须记下实际接收到的计数,并调用peek异步(236-返回计数),其中包含带减去值的参数<代码>返回的计数应在每次获得结果时递增。

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

 类似资料:
  • 我想从azure服务总线(队列)读取所有消息。 我已经按照下面的指示链接https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-php-how-to-use-queues 目前它只能获取一条消息。。 我想从服务总线(队列)获取所有消息。 提前谢谢。。

  • 我正在使用Azure服务总线队列。但是我不能使用“获取所有队列消息(peek Lock):微软内置于api”从队列中获取所有消息。 有没有办法获取所有队列消息? {"$连接":{"值":{"servicebus_1":{"连接ID":"/订阅/c776fex3-6aec-4722-b099-b054c267b240/资源组/Plugin-Resources/提供者/Microsoft.网络/连接/

  • 我是Azure服务总线的新手,我应该将消息推送到队列中,然后有一个单独的计划任务,该任务将读取该队列中的所有活动消息,并将它们批量导入到sql我以前尝试过这个代码,当我调用时它正在工作它在发送消息后立即工作,但现在它在单独的计划任务中不工作。任何帮助为什么或什么我可以用来批量阅读信息或这是不可能的

  • 今天晚上,我们观察到排队时间非常慢。我们的追踪数据告诉我们 需要45-60秒。这种情况发生在两个已经存在很长时间的队列上。他们几乎从来没有超过1-2条记录,我们使用一个带有服务总线触发器的网络作业来完成任务。我们正在排队等候一个简单的POCO。还有另一个队列正在快速排队,所以由于没有任何其他想法,我删除了两个麻烦的队列。当代码重新创建它们时(正如它被构建时所做的那样),它们在不到一秒钟的时间里开始

  • 我有一个windows服务,它侦听Azure服务总线队列消息,以便从我的WebApi应用程序分发处理。此外,我还需要处理重复性任务(每晚/每周),我认为最好使用相同的系统来处理这些任务。 例如,假设我有一个“CleanupDb”队列,每天午夜删除过时的DB节点: 理论上这应该行得通,但我觉得我错过了一个更明显的处理方法。有没有更好的办法?

  • 我有多个消息在我的服务总线主题,我想处理这个消息一个一个,在一个服务总线触发器,它应该得到所有的消息,没有被处理。而且由于我正在进行测试和调试,我不希望消息被完成,也就是说,如果它没有完成,它会留在主题中供任何其他服务使用。 我已经开始使用带有服务总线主题触发器的Azure功能应用程序,并且已经向上移动到这里,在这里我获得了我日志中的所有消息,但是一旦完成,我没有获得任何其他消息,因为所有消息都已