RabbitMQ несколько потребителей в одном процессе - PullRequest
1 голос
/ 23 мая 2019

У меня есть проект .NET, который должен читать сообщения из заданной очереди. У меня есть несколько производителей, пишущих сообщения одного типа в очередь. Я хочу, чтобы мое потребительское приложение имело несколько потоков, читающих сообщения и обрабатывающих их, чтобы загрузка не была в одном потоке.

Есть идеи или пример кода о том, как этого добиться? Опять же, обратите внимание: Каждое сообщение должно быть обработано один раз, а не несколько раз. Работа должна быть сбалансирована между рабочими потоками

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Взгляните на проект masstransit: http://masstransit -project.com / MassTransit / использовании / message-consumer.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}");

    }
}
0 голосов
/ 24 мая 2019

Вам понадобится немного сантехники, чтобы сделать это.

У меня есть служебная шина с открытым исходным кодом, которая называется Shuttle.Esb , и есть много других доступных вариантов служебной шины, которые вы можете рассмотреть.

Но если вы не хотите идти по этому пути, вы все равно могли бы взглянуть на некоторые коды и реализации, чтобы получить некоторые идеи. У меня есть реализация RabbitMQ , которая может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...