Знакомство: В RabbitMQ все сообщения, отправленные производителями, принимаются Exchange, которая затем пересылает их в очередь для хранения согласно определённой политике RabbitMQ предлагает четыре типа обменов: развернутый, прямой, тематический и заголовок Режим заголовка на практике используется реже, и в этой статье сравниваются только первые три режима.
1. Прямой обмен
Любые сообщения, отправленные в Direct Exchange, пересылаются в очередь, указанную в RouteKey.
1. В целом вы можете использовать Exchange, который идёт в комплекте с rabbitMQ:" (название Exchange — пустая строка, далее — стандартная Exchange).
2. В этом режиме нет необходимости выполнять какие-либо операции связывания на Exchange
3. Для обмена сообщениями требуется «RouteKey», который можно просто понять как название очереди, куда отправляется.
4. Если имя очереди, указанное в RouteKey, отсутствует в vhost, сообщение отбрасывается.
2. Обмен Fanout
Любые сообщения, отправленные в Fanout Exchange, пересылаются во все очереди, связанные с этой биржей.
1. Её можно понимать как шаблон таблицы маршрутизации
2. В этом режиме не требуется RouteKey
3. В этом режиме необходимо заранее привязать Exchange к Queue, одна Exchange может привязывать несколько Queue, а одна Queue — к нескольким Exchange.
4. Если Биржа, получившая сообщение, не привязана к какой-либо очереди, оно отбрасывается.
3. Обмен темами
Любые сообщения, отправленные в Topic Exchange, пересылаются во все очереди, которые занимаются темами, указанными в RouteKey
1. Этот шаблон более сложный, проще говоря: каждая очередь имеет свою тему, все сообщения имеют «заголовок» (RouteKey), и Exchange пересылает сообщение во все очереди, которые могут фугально совпасть с RouteKey соответствующей темы.
2. Для этого режима требуется RouteKey, возможно, заранее привязанный к Exchange и Queue.
3. При привязке укажите тему, которая интересна очереди, например «#.log.#», чтобы показать, что очередь заботится обо всех сообщениях, связанных с журналами (сообщение с RouteKey «MQ.log.error» будет переадресовано в очередь).
4. «#» означает 0 или несколько ключевых слов, а «» — одно ключевое слово. Например, «log». Он может совпадать с «log.warn», но не может совпадать с «log.warn.timeout»; Но «log.#» совпадает с вышеописанным.
5. Аналогично, если Exchange не найдёт очередь, соответствующую RouteKey, он отбросит это сообщение.
|