![](/img/trans.png)
[英]RabbitMQ: How multiple consumers can receive messages from the same queue?
[英]RabbitMQ several consumers in the same process
我有一個.NET項目,需要讀取給定隊列中的消息。 我有幾個生產者將相同類型的消息寫入隊列。 我希望我的消費者應用程序具有多個線程來讀取消息並進行處理,以使負載不會在單個線程上。
關於如何實現此目標的任何想法或示例代碼? 同樣,請注意:每個消息應處理一次,而不要處理多次。 在工作線程之間應該平衡工作
您將需要一些管道來完成該任務。
我有一個名為Shuttle.Esb的開源服務總線,還有許多其他的服務總線選項可供您考慮。
但是,如果您不想走那條路,您仍然可以查看一些代碼和實現以獲取一些想法。 我有一個RabbitMQ實現可能會有所幫助。
看看masstransit項目: http ://masstransit-project.com/MassTransit/usage/message-consumers.html
它具有預取計數和並發限制之類的配置。 它使您並行使用消息。
設置也很簡單:
IBusControl busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost host = cfg.Host(new Uri(RabbitMQConstants.RabbitMQUri),
hst =>
{
hst.Username(RabbitMQConstants.RabbitMQUserName);
hst.Password(RabbitMQConstants.RabbitMQPassword);
});
cfg.ReceiveEndpoint(host,
RabbitMQConstants.YourQueueName,
endPointConfigurator => {
endPointConfigurator.Consumer<SomeConsumer>();
endPointConfigurator.UseConcurrencyLimit(4);
});
});
busControl.Start();
public class SomeConsumer :
IConsumer<YourMessageClass>
{
public async Task Consume(ConsumeContext<YourMessageClass> context)
{
await Console.Out.WriteLineAsync($"Message consumed: {context.Message.YourValue}");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.