2017-01-15 3 views
1

Я пытаюсь масштабировать систему обмена сообщениями RabbitMQ. Текущая система очень проста - производитель отправляет сообщение об обмене разветвлением, а сообщение обрабатывается несколькими потребителями - классическая маршрутизация разветвления.RabbitMQ Work-Queue для обмена сообщениями FanOut

У меня есть несколько потребителей из разных типов (например, один, который печатает на экран, тот, который записывается в файл, тот, который сохраняется в DB, ​​...). Мой вызов - я не уверен, что лучший способ масштабировать потребителей. Если я добавлю других пользователей из одного типа - я получу двойные записи или двойные записи в БД. ... (подумайте о двух потребителях БД, потребляющих один и тот же обмен разветвлений).

Я думаю, что я могу создать потребителя, который публикует в рабочей очереди, но мне интересно, есть ли лучшее «встроенное» решение в rabbitmq.

заранее спасибо, ZF

ответ

0

Если вам необходимо масштабировать потребитель, чтобы потребить быстрее все сообщения, приходящие от обмена ветвления, нужна конкурентоспособные потребляя; поэтому вам нужно больше потребителей, прикрепленных к одной очереди, связанной с обменом разветвлением.
Таким образом, каждый потребитель будет потреблять пакет сообщений отдельно от других. Количество сообщений внутри партии определяется с помощью свойства count prefetch (http://www.rabbitmq.com/consumer-prefetch.html).
Таким образом, в вашем случае вы должны иметь возможность масштабировать пользователей, избегая двойных журналов и двойных записей в БД.

+0

Это очевидно, поэтому я думаю, что я не был ясен ... Извиняюсь. Вопрос заключается в том, как масштабировать, убеждаясь, что от каждого типа потребителей только один будет обрабатываться. Если у меня есть два типа consuners, type1 и type2, и я хочу, чтобы каждое сообщение обрабатывалось каждым типом, но только один раз для каждого типа. Я могу создать обмен фанатов, который отправит 2 очереди работы ... Есть ли еще один вариант? – user7412510

+0

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

+0

'Я могу создать обмен фанатов, который отправит 2 очереди работы ... Есть ли еще один вариант ? '<- Почему? этот шаблон делает именно то, что вы ищете. Зачем вам нужен другой путь! Я, возможно, не понял вашу проблему! – Gabriele

Смежные вопросы