Rabbitmq 在EasyNetQ订户之间分配工作

Rabbitmq 在EasyNetQ订户之间分配工作,rabbitmq,easynetq,Rabbitmq,Easynetq,给定两个订阅者,从RabbitMQ队列同步处理消息对象,一次一个,持续3s 当publisher发送4条消息时: 消息{Text:1} 消息{Text:2} 信息{文本:3} 信息{Text:4} 是否可以这样划分工作: 认购人1-1-00:00:00 订阅人2-2-00:00:00 订阅人1-3-00:00:03 订阅人2-4-00:00:03 那么订阅者会立即从前两条消息开始,然后在完成后再开始下一条消息?秩序对我来说并不重要。我想使用EasyNetQ,因为它有很好的api,但是默认的.NE

给定两个订阅者,从RabbitMQ队列同步处理消息对象,一次一个,持续3s

当publisher发送4条消息时:

消息{Text:1}

消息{Text:2}

信息{文本:3}

信息{Text:4}

是否可以这样划分工作:

认购人1-1-00:00:00

订阅人2-2-00:00:00

订阅人1-3-00:00:03

订阅人2-4-00:00:03

那么订阅者会立即从前两条消息开始,然后在完成后再开始下一条消息?秩序对我来说并不重要。我想使用EasyNetQ,因为它有很好的api,但是默认的.NET/C RabbitMQ客户端也可以

此代码未按预期工作:

var Bus = RabbitHutch.CreateBus("host=localhost");

Bus.Subscribe<Message>("subscriptionId", x =>
{
    Console.WriteLine("Subscriber1 - " + x.Text + " - " + DateTime.Now.ToString("HH:mm:ss"));
    Thread.Sleep(3000);
});

Bus.Subscribe<Message>("subscriptionId", x =>
{
    Console.WriteLine("Subscriber2 - " + x.Text + " - " + DateTime.Now.ToString("HH:mm:ss"));
    Thread.Sleep(3000);
});

Bus.Publish(new Message("1"));
Bus.Publish(new Message("2"));
Bus.Publish(new Message("3"));
Bus.Publish(new Message("4"));
有人吗?

我想出来了。 应该是这样的:

Bus = RabbitHutch.CreateBus("host=localhost;prefetchcount=1");

Bus.SubscribeAsync<Message>("subscriptionId", async x =>
{
    Console.WriteLine("Subscriber1 - " + x.Text + " - " + DateTime.Now.ToString("HH:mm:ss"));
    await Task.Delay(3000);
});

Bus.SubscribeAsync<Message>("subscriptionId", async x =>
{
    Console.WriteLine("Subscriber2 - " + x.Text + " - " + DateTime.Now.ToString("HH:mm:ss"));
    await Task.Delay(3000);
});
订阅服务器需要是异步的,但关键的部分也是将prefetchcount设置为1。

如果您关心使用者的性能,将prefetchcount设置为1可能不是一个好主意。假设您希望并行处理消息,那么您关心的是性能。因此,首先,最好有一个SubscribeAsync,但将prefetchcount保留为默认值或找到自己的值。