簡體   English   中英

RabbitMQ在同一過程中有多個消費者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM