【问题标题】:Read azure service bus QUEUE messages synchronously同步读取 azure service bus QUEUE 消息
【发布时间】:2020-09-18 09:17:24
【问题描述】:

下面的代码异步读取消息,但我想一次读取一条消息,然后在第二天或 1 周后读取队列中的下一条消息。如何同步读取一条消息并将其余消息保留在 azure 服务总线队列中以供下次读取。

enter code here

using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.ServiceBus;

namespace ConsoleApp2
  {
class Program
{
    const string ServiceBusConnectionString = "xxxxxx";
    const string QueueName = "xxx";
    static IQueueClient queueClient;
    public static async Task Main(string[] args)
    {
        queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

        RegisterOnMessageHandlerAndReceiveMessages();

        Console.ReadKey();

        await queueClient.CloseAsync();
    }
    static void RegisterOnMessageHandlerAndReceiveMessages()
    {
        var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
        {
            MaxConcurrentCalls = 10,
            AutoComplete = false
        };
        queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
    }
    static async Task ProcessMessagesAsync(Message message, CancellationToken token)
    {
        Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
        await queueClient.CompleteAsync(message.SystemProperties.LockToken);
    }
    static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
    {
        Console.WriteLine($"Message handler encountered an exception {exceptionReceivedEventArgs.Exception}.");
        var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
        Console.WriteLine("Exception context for troubleshooting:");
        Console.WriteLine($"- Endpoint: {context.Endpoint}");
        Console.WriteLine($"- Entity Path: {context.EntityPath}");
        Console.WriteLine($"- Executing Action: {context.Action}");
        return Task.CompletedTask;
    }
}

}

【问题讨论】:

  • 不注册messagehandler,可以直接使用同步QueueClient.Receive()方法吗?
  • @FrankAlvaro 我在 Microsoft.Azure.ServiceBus 命名空间中找不到此方法。我不知道如何创建 MessagingFactory 并阅读消息。你有样品参考吗?
  • 道歉 - QueueClient.Receive 方法位于 Microsoft.ServiceBus.Messaging 命名空间中。 simple brokered messaging here 有一个简单的演练,它似乎使用了同步方法。
  • @FrankAlvaro Microsoft.ServiceBus.Messaging 已弃用,也无法正常工作。你对最新的 Microsoft.Azure.ServiceBus 命名空间有什么想法
  • @SNew 你有没有得到控制消息的解决方案。

标签: c# azure message-queue


【解决方案1】:

您应该能够通过使用MessageReceiver 类来实现这一点。

看看这个例子的实现细节:

https://github.com/Azure/azure-service-bus/blob/master/samples/DotNet/Microsoft.ServiceBus.Messaging/ReceiveLoop/Program.cs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2022-10-08
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多