RabbitMQ 异步支持

时间:2023-04-27
本文介绍了RabbitMQ 异步支持的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

RabbitMQ .NET 客户端是否有任何类型的异步支持?我希望能够异步连接和使用消息,但到目前为止还没有找到方法.

Does the RabbitMQ .NET client have any sort of asynchronous support? I'd like to be able to connect and consume messages asynchronously, but haven't found a way to do either so far.

(对于消费消息,我可以使用 EventingBasicConsumer,但这不是一个完整的解决方案.)

只是为了提供一些上下文,这是我目前如何使用 RabbitMQ 的一个示例(代码取自我的博客):

Just to give some context, this is an example of how I'm working with RabbitMQ at the moment (code taken from my blog):

var factory = new ConnectionFactory() { HostName = "localhost" };

using (var connection = factory.CreateConnection())
{
    using (var channel = connection.CreateModel())
    {
        channel.QueueDeclare("testqueue", true, false, false, null);

        var consumer = new EventingBasicConsumer(channel);
        consumer.Received += Consumer_Received;
        channel.BasicConsume("testqueue", true, consumer);

        Console.ReadLine();
    }
}

推荐答案

Rabbit 支持使用 AsyncEventingBasicConsumer 类分派到异步消息处理程序.它的工作方式类似于 EventingBasicConsumer,但允许您注册一个返回 Task 的回调.回调被调度到,返回的 Task 由 RabbitMQ 客户端等待.

Rabbit supports dispatching to asynchronous message handlers using the AsyncEventingBasicConsumer class. It works similarly to EventingBasicConsumer, but allows you to register a callback which returns a Task. The callback is dispatched to and the returned Task is awaited by the RabbitMQ client.

var factory = new ConnectionFactory
{
    HostName = "localhost",
    DispatchConsumersAsync = true
};

using(var connection = cf.CreateConnection())
{
    using(var channel = conn.CreateModel())
    {
        channel.QueueDeclare("testqueue", true, false, false, null);

        var consumer = new AsyncEventingBasicConsumer(model);

        consumer.Received += async (o, a) =>
        {
            Console.WriteLine("Message Get" + a.DeliveryTag);
            await Task.Yield();
        };
    }

    Console.ReadLine();
}

这篇关于RabbitMQ 异步支持的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:如何在 RabbitMQ 中设置重试次数? 下一篇:指定公共交通中的发布超时

相关文章