在EasyNetQ订阅者之间划分工作

时间:2017-04-06 20:31:20

标签: rabbitmq easynetq

给定两个订阅者,同步处理来自RabbitMQ队列的Message对象,一次一个3s

当发布商发送4封邮件时:

消息{文字:1}

消息{文字:2}

消息{文字:3}

消息{文字:4}

是否可以通过这种方式划分工作:

Subscriber1 - 1 - 00:00:00

Subscriber2 - 2 - 00:00:00

Subscriber1 - 3 - 00:00:03

Subscriber2 - 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"));

任何?

1 个答案:

答案 0 :(得分:1)

我明白了。 应该是这样的:

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

相关问题