问题描述
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 异步支持的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!