Интересно, существуют ли правила создания отдельной очереди в RabbitMQ и когда несколько? Или это зависит от того, отправлять или не отправлять сообщения в одну очередь или несколько, и технически нет никакой разницы? Должно ли оно зависеть от схемы db, т. Е. Должна ли одна таблица соответствовать одной очереди?Когда я должен использовать одиночную очередь и когда несколько?
ответ
Одиночная очередь в RabbitMQ и когда несколько?
Одиночная очередь - очень плохая идея. в конечном итоге вы захотите, чтобы разные типы сообщений проходили через кролик. если у вас только одна очередь, вы в конечном итоге воспроизведете логику того, как решить, какой код должен обрабатывать сообщение, когда RabbitMQ может сделать это для вас с маршрутизацией.
В общем, каждый тип «работы», который должен быть выполнен, представлен сообщением, должен быть его собственной очередью.
также будут случаи, когда конкретный потребитель сообщения будет нуждаться в собственной очереди, даже если одни и те же сообщения передаются в другие очереди.
Или его производителю или не отправлять сообщения в одной очереди или нескольких из них
производитель не решить, какие очереди сообщения оно доставлено. производитель знает, какой обмен можно публиковать. потребители сообщений должны быть теми, кто решает, куда доставляются сообщения. потребитель сообщения должен нести ответственность за настройку маршрутизации между обменом и конечной очередью.
есть исключения из этого правила, как и любой «хорошей идеей» в разработке программного обеспечения, но в целом я считаю, что это правда
Если это зависит от схемы БД
ваша конфигурация RabbitMQ имеет нулевую корреляцию с вашей базой данных. не пытайтесь сопоставить между ними. это будет больно, в лучшем случае.
скорее, посмотрите на поведение.
Какое поведение должно запускать это сообщение? каково конкретное поведение, и какой ключ обмена/маршрутизации должен быть опубликован?
это лучшие вопросы, которые приведут вас к лучшему макету RabbitMQ с акцентом на обмены для групп связанных сообщений, очереди, предназначенные для определенного типа потребителей сообщений или конкретного потребителя, и клавиши маршрутизации, которые обеспечивают логику для перемещения сообщения из обмена в нужную очередь.
...
я бы рекомендовал чтение некоторых книг по RabbitMQ, чтобы получить себе переходящий в правильном направлении с основами как RabbitMQ должно быть использовано, а затем получить в хорошие модели использования и проектирование топологии:
- RabbitMQ In Action - от нуля, что это такое, почему вы должны использовать его, как он работает и т. Д.Рекомендуется для тех, кто смотрит на RMQ
- RabbitMQ Layout - понимание того, как RabbitMQ вписывается в различные сценарии, как сказано по рассказам разработчиков решения проблем - это «почему-к» из RMQ проектирования топологии (биржи, очередей и привязок)
- RabbitMQ Patterns - понимать типы сообщений, маршрутизацию и общие шаблоны использования в системах обмена сообщениями, применительно к RabbitMQ - это основной шаблон «how-to» для применения и топологического проектирования с помощью RMQ
- 1. Когда я должен использовать $ (объект), и когда следует использовать $ object?
- 2. Когда я должен использовать класс и когда следует использовать функцию?
- 3. Когда я должен использовать datagrid и когда следует использовать datagridview?
- 4. Когда использовать одиночную таблицу или несколько таблиц в mysql, Oracle?
- 5. Когда я должен использовать потоки?
- 6. Когда я должен использовать @property?
- 7. Когда я должен использовать AQL?
- 8. Когда я должен использовать SQLTransaction
- 9. Когда я должен использовать javax.swing.SwingUtilities.invokeLater()?
- 10. Когда я должен использовать UITableViewCellSeparatorStyleSingleLineEtched?
- 11. Когда я должен использовать возврат?
- 12. Когда я должен использовать обещания?
- 13. Когда я должен использовать RESTful?
- 14. Когда и почему я должен использовать портлеты
- 15. Когда я должен использовать logger.error и logger.info
- 16. Почему и когда я должен использовать innerHTML
- 17. Когда я должен использовать EMS и когда я должен использовать веб-службу (например, WCF)
- 18. Когда я должен использовать datacontract и когда messagecontract в WCF
- 19. Когда я должен использовать функцию уаг и когда функция
- 20. OpenGL, когда я должен сделать, и когда я не должен
- 21. Когда использовать очередь над arraylist
- 22. Когда я должен использовать сервер приложений?
- 23. Когда я должен использовать push с силой?
- 24. Когда я должен использовать несколько контроллеров в mvc?
- 25. Когда я должен использовать несколько контроллеров в своем приложении?
- 26. Я создал одиночную очередь с ежедневной перемоткой
- 27. В PHP, когда использовать массивы и когда использовать несколько переменных?
- 28. Когда я должен использовать библиотеку фреймворка javascript?
- 29. Когда я должен использовать базы данных?
- 30. Когда я должен использовать objects.raw() в Django?
Спасибо. ** производитель не решает, в какие очереди отправляется сообщение. ** он принимает решение, указав имя очереди, не так ли? –
производитель указывает обмен, по которому публикуется сообщение. привязки RabbitMQ между обменом и очередью, используя ключ маршрутизации (если применимо), определяют, в какую очередь отправляется сообщение. 2 исключения: очередь вентиляторов, где ключ маршрутизации не используется и по умолчанию «прямая» очередь, где ключ маршрутизации - это имя целевой очереди. но не используйте прямую очередь по умолчанию. это делает вещи назад, IME –
, а также указывает очередь. –