RabbitMQ:AsyncEventingBasicConsumer与EventingBasicConsumer

RabbitMQ:AsyncEventingBasicConsumer与EventingBasicConsumer,rabbitmq,Rabbitmq,我一直在做一个小示例应用程序,以使用RabbitMQ中队列上的消息 代码应读取消息“调用REST API”(此处替换为Task.Delay): static void Main(字符串[]args) { var工厂=新连接工厂 { Uri=新Uri(“…”), DispatchConsumersAsync=true }; var connection=factory.CreateConnection(); var channel=connection.CreateModel(); var con

我一直在做一个小示例应用程序,以使用RabbitMQ中队列上的消息

代码应读取消息“调用REST API”(此处替换为
Task.Delay
):

static void Main(字符串[]args)
{
var工厂=新连接工厂
{
Uri=新Uri(“…”),
DispatchConsumersAsync=true
};
var connection=factory.CreateConnection();
var channel=connection.CreateModel();
var consumer=新的AsyncEventingBasicConsumer(通道);
consumer.Received+=async(model,eventArgs)=>
{
WriteLine(“进行假API调用…”);
等待任务。延迟(2000);
WriteLine(“使用假API调用完成!”);
channel.BasicAck(eventArgs.DeliveryTag,false);
};
channel.BasicConsume(“我的队列”,false,消费者);
}
当我运行此应用程序时,队列上有五条消息,我得到以下结果:

消息一个接一个地处理,延迟2秒约需10秒。 我本以为会看到五行
执行假API调用…
然后是五行
执行假API调用总时间约为2秒

在执行同步版本时,我看到了完全相同的结果-这是预期的:

static void Main(字符串[]args)
{
var工厂=新连接工厂
{
Uri=新Uri(“…”)
};
var connection=factory.CreateConnection();
var channel=connection.CreateModel();
var消费者=新事件基本消费者(渠道);
consumer.Received+=(型号、事件参数)=>
{
WriteLine(“进行假API调用…”);
《睡眠》(2000年);
WriteLine(“使用假API调用完成!”);
channel.BasicAck(eventArgs.DeliveryTag,false);
};
channel.BasicConsume(“我的队列”,false,消费者);
}
我的问题是:使用
AsyncEventingBasicConsumer
EventingBasicConsumer
有什么区别? 和:是否有办法让消费者在等待处理以前的消息时处理其他消息