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

Azure服务总线MessageReceiver.ReceivAsync返回null

齐昊苍
2023-03-14

我有一个azure功能,每1分钟触发一次。该函数创建如下所示的MessageReceiver

var messageReceiver = new MessageReceiver(serviceBusConnectionString, entityPath, ReceiveMode.PeekLock, null, 0);
var allMessages = new List<Message>();
Message message;

do {
    message = await messageReceiver.ReceiveAsync(TimeSpan.FromSeconds(2));
    if (message != null) allMessages.Add(message);
} while (message != null && allMessages.Count() < 100);

处理后,将使用messageReceiver.CompleteAsync完成消息,并使用messageReceiver.CloseAsync()关闭messageReceiver。

该函数第一次运行时最多从订阅获取100条消息,但在下一次运行时,它只获取0或1条消息,无论订阅中可用的消息数量如何(Service Bus Explorer显示订阅中有超过10条消息)。因此,即使有消息可用,ReceiveAsync似乎也返回null。

增加ReceiveAsync的超时似乎没有帮助。

当有消息可用时,ReceiveAsync为什么返回null?

共有1个答案

赵宏达
2023-03-14

我找到了解决办法或变通办法。如果我将服务总线主题更改为不允许分区(这要求删除该主题并重新创建它),那么当有消息可用时,ReceiveAsync总是返回一条消息。

这些问题似乎与此问题有关Azure服务总线ReceiveBatch()的古怪行为

 类似资料:
  • 我一直在尝试创建一个客户端来连接我的Azure服务总线队列。我一直在参考此文档: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-java-how-to-use-queues#send-消息到队列。 我的代码: 在创建客户端时,我遇到以下错误: 通用域名格式。微软蔚蓝色的服务总线。原语。Service

  • 我正在寻找一种解决方案,用于在几个本地数据库之间进行实时数据集成。没有太多的数据转换。我正在评估各种可用的ESB。我认为使用Azure服务总线进行数据集成可以快速开发解决方案。建议使用Azure service bus集成所有内部数据库吗?

  • 在Azure服务总线主题中,我有一个包含1000多条消息的订阅。这些消息由worker角色使用。出于监视目的,我想查看前10条消息,看看哪种消息正在等待处理。为了完成该任务,我创建了一个subscriptionclient,并调用方法PeekBatchAsync。奇怪的行为是,有时PeekBatchAsync返回的消息少于10条(即2条或4条)。 更多信息以澄清上下文: 我确信订阅包含超过1000

  • 我使用此url中的示例http://azure.microsoft.com/en-us/documentation/articles/service-bus-java-how-to-use-jms-api-amqp/.我有两个问题: 1、ACS或SAS 连接URL, 用户名和密码来自ACS身份验证,但Azure服务总线已将其身份验证从ACS更改为SAS。它是否也支持SAS身份验证?就像用户名是SA

  • 我已经创建了一个Azure webwork,它将向服务总线队列发送强类型消息,并成功发送。 我想创建另一个webjob,只要servicebus队列中有消息,就会触发该webjob。请在下面找到我正在尝试的代码。出于某种原因,尽管servicebus队列中有消息,但当我在本地运行webjob时,webjob未被触发并出现错误。 错误: 代码: 有谁能帮我解决这个问题吗? 谢谢

  • 来自第三次订阅的消息会发生什么情况,是否会在TTL之后发送到死信队列 有没有办法找出消息未被使用的订阅