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 异步支持
发布评论