c# - 如何查看Azure服务总线队列中的所有消息?

标签 c# .net azure azureservicebus

我想查看来自多个 Azure 服务总线队列的所有消息。之后,我想在queueName、insertDate之后过滤它们,并提供对正文进行全文搜索的机会。

目前,我正在使用 Microsoft.Azure.ServiceBus 包创建一个 ManagementClient 来收集队列信息,然后使用 MessageReceiver来查看消息。

var managementClient = new ManagementClient(connectionString);

var queue = await managementClient.GetQueueRuntimeInfoAsync(queueName);

var count = queue.MessageCount;

var receiver = new MessageReceiver(connectionString, queueName);

var messagesOfQueue = new List<Message>();

for (var i = 1; i <= count; i++)
{
   messagesOfQueue.Add(await receiver.PeekAsync());
}

有没有更好的方法来获取所有消息?或者有没有办法只查看适用于过滤器的消息?

我还尝试使用 WindowsAzure.ServiceBus 包中的 QueueClient.PeekBatch 方法。但尽管我设置了正确的 messageCount 参数,但该方法并未返回所有消息。

然后还有包Azure.Messaging.ServiceBus...所有这些包是怎么回事?

那么我应该使用哪个包以及基于某些过滤器查看队列消息的最佳方法是什么?

最佳答案

我当前正在使用且按预期工作的解决方案如下所示:

var receiver = serviceBusClient.CreateReceiver(queueName);

var messagesOfQueue = new List<ServiceBusReceivedMessage>();
var previousSequenceNumber = -1L;
var sequenceNumber = 0L;

do
{
  var messageBatch = await receiver.PeekMessagesAsync(int.MaxValue, sequenceNumber);

  if (messageBatch.Count > 0)
  {
    sequenceNumber = messageBatch[^1].SequenceNumber;

    if (sequenceNumber == previousSequenceNumber)
      break;

    messagesOfQueue.AddRange(messageBatch);

    previousSequenceNumber = sequenceNumber;
  }
  else
  {
    break;
  }
} while (true);

它使用 nuget 包Azure.Messaging.ServiceBus

关于c# - 如何查看Azure服务总线队列中的所有消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66814499/

相关文章:

c# - 当我不需要响应时使用不等待的异步

java - 共享 nHibernate 和 hibernate 二级缓存

Azure 应用程序网关在来自 APIGEE 时对请求正文进行 strip 化

c# - 将泛型方法转换为异步导致泛型参数出现问题

.net - 我们可以使用 wkhtmltopdf.exe 为 pdf 设置显示布局吗

azure - 如何使用用户分配的身份触发 blob 函数

c# - Active Directory redirect_uri 显示 IP 而不是 DNS 名称。如何在使用 Azure AD 进行身份验证时在代码中提供绝对 CallbackPath?

c# - 您可以向 ReSharper 的 "Adjust Namespaces"生成的命名空间添加前缀吗?

c# - 显示带缩进的父/子名称

c# - 在 C# 中获取 String.indexof 之前/之后的字符串