Меня смущает ваш выбор трех терминов для сравнения.В RabbitMQ Fanout и Direct являются типами обмена.Pub-Sub - это общий шаблон обмена сообщениями, но не тип обмена.И вы даже не упомянули третий и самый важный тип Exchange, а именно Topic.Фактически, вы можете реализовать поведение разветвления при обмене темой, просто объявив несколько очередей с одним и тем же ключом привязки.И вы можете определить поведение Direct в обмене темами, объявив Очередь с *
ключом подстановки.
Pub-Sub обычно понимается как шаблон, в котором приложение публикует сообщения, которые используются несколькимиподписчики.
С RabbitMQ / AMQP важно помнить, что сообщения всегда публикуются на биржах.Затем обменивается маршрутом в очереди.И очереди доставляют сообщения подписчикам.Поведение обмена важно.В Тематических обменах ключ маршрутизации от издателя сопоставляется с ключом привязки от подписчика, чтобы принять решение о маршрутизации.Связывающие ключи могут иметь шаблоны подстановочных знаков, которые дополнительно влияют на решение о маршрутизации.Более сложная маршрутизация может быть сделана на основе содержимого заголовков сообщений с использованием типа обмена заголовками
RabbitMQ не гарантирует доставку сообщений, но вы можете получить гарантированную доставку, выбрав правильные варианты (режим доставки = 2 для постоянных сообщений) и объявление обменов и очередей перед запуском приложения, чтобы сообщения не отбрасывались.