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(); } }推荐答案
兔子支持使用AsyncEventingBasicConsumer类向异步消息处理程序进行分派.它的作用类似于EventingBasicConsumer,但是允许您注册一个返回Task的回调.回调被调度到,并且RabbitMQ客户端正在等待返回的Task.
Rabbit supports dispatching to asynchronous message handlers using the AsyncEventingBasicConsumer class. It works similarly to the EventingBasicConsumer, but allows you to register an 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异步支持
发布评论