在 EasyNetQ 订阅者之间分配工作
Divide work between EasyNetQ subscribers
给定两个订阅者,同步处理来自 RabbitMQ 队列的 Message 对象,一次一个,持续 3 秒,
当发布者发送 4 条消息时:
消息{文本:1}
消息{文本:2}
消息{文本:3}
消息{文本: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);
});
订阅者需要async,但关键部分也是将prefetchcount设置为1。
给定两个订阅者,同步处理来自 RabbitMQ 队列的 Message 对象,一次一个,持续 3 秒,
当发布者发送 4 条消息时:
消息{文本:1}
消息{文本:2}
消息{文本:3}
消息{文本: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);
});
订阅者需要async,但关键部分也是将prefetchcount设置为1。