Порядок получения сообщений от одновременных потребителей в Spring и RabbitMQ - PullRequest
0 голосов
/ 11 октября 2018

У меня следующий код, поэтому я читаю сообщения из одной очереди и пересылаю ее в другую.

Меня интересует метод setConcurrentConsumers(3). Означает ли это, что будут созданы три потока слушателя?

И в таком случае, как я понял, порядок повторной отправки в очередь1 и очередь2 не будет соблюден.Что касается меня, то импорт должен иметь тот же порядок сообщений, что и при получении.

@RabbitListener(queues = "queue",containerFactory="rabbitListenerContainerFactory") 
public void processQueue(String message) {
    rabittemplate.send("queue1", message);
    rabittemplate.send("queue2", message);
}

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setConcurrentConsumers(3);
    factory.setMaxConcurrentConsumers(10);
    return factory;
}

1 Ответ

0 голосов
/ 11 октября 2018

Смысл включения concurrentConsumers состоит в том, чтобы позволить обрабатывать сообщения параллельно, чтобы ускорить общее выполнение.Делая это, вы автоматически подписываете контракт, в котором вы соглашаетесь с тем, что все асинхронно, и вы больше не можете принимать заказ.

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

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