Вопросы интервью RabbitMQ должны знать 29 вопросов (с ответами)

RabbitMQ

Очередь сообщений также называется MQ (очередь сообщений). RabbitMQ, как отличная платформа для очередей сообщений и с открытым исходным кодом, используется многими компаниями. Сервер RabbitMQ написан на языке Erlang и основан на AMQP.Эта статья суммирует 29 пунктов знаний RabbitMQ или вопросов для интервью, которые можно постоянно собирать и обновлять. . .

1. Что такое RabbitMQ?

RabbitMQ — это программное обеспечение брокера сообщений с открытым исходным кодом (также известное как промежуточное ПО, ориентированное на сообщения), которое реализует протокол расширенной очереди сообщений (AMQP). Сервер RabbitMQ написан на языке Erlang, а кластеризация и отказоустойчивость построены на платформе открытой телекоммуникационной платформы. Все основные языки программирования имеют клиентские библиотеки, взаимодействующие с интерфейсом прокси.

2. Возможности RabbitMQ?

Надежность: RabbitMQ использует некоторые механизмы для обеспечения надежности, такие как постоянство, подтверждение передачи и подтверждение выпуска.

Гибкая маршрутизация: маршрутизируйте сообщения через обмены до того, как они попадут в очередь. Для типичных функций маршрутизации RabbitMQ уже предоставляет некоторые встроенные переключатели для реализации. Для более сложных функций маршрутизации вы можете связать вместе несколько коммутаторов или реализовать свои собственные коммутаторы с помощью механизма подключаемых модулей.

Масштабируемость: несколько узлов RabbitMQ могут образовывать кластер, а узлы в кластере можно динамически расширять в соответствии с реальными условиями бизнеса.

Высокая доступность. Очереди можно зеркально отразить на компьютерах в кластере, чтобы очереди оставались доступными в случае сбоя некоторых узлов.

Несколько протоколов: RabbitMQ не только изначально поддерживает протокол AMQP, но также поддерживает STOMP, MQTT и другие протоколы промежуточного программного обеспечения сообщений.

Многоязычные клиенты: RabbitMQ поддерживает почти все распространенные языки, такие как Java, Python, Ruby, PHP, C#, JavaScript и т. д.

Интерфейс управления: RabbitMQ предоставляет простой в использовании пользовательский интерфейс, который позволяет пользователям отслеживать и управлять сообщениями, узлами в кластере и т. д.

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

3. Что такое AMQP?

RabbitMQ — это Erlang-реализация протокола AMQP (разумеется, RabbitMQ также поддерживает STOMP2, MQTT3 и другие протоколы). Архитектура модели AMQP такая же, как у RabbitMQ. Производитель отправляет сообщения на биржу, а биржа привязана. к очереди.

Обмены, типы обмена, очереди, привязки, ключи маршрутизации и т. д. в RabbitMQ являются соответствующими понятиями в протоколе AMQP. В настоящее время последняя версия RabbitMQ по умолчанию поддерживает AMQP 0-9-1.

4. Уровень 3 протокола AMQP?

Модульный уровень: самый высокий уровень протокола, который в основном определяет некоторые команды, вызываемые клиентом.Клиент может использовать эти команды для реализации своей собственной бизнес-логики.

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

Транспортный уровень: нижний уровень, который в основном передает потоки двоичных данных, обеспечивает обработку кадров, использование каналов, обнаружение ошибок и представление данных.

5. Каковы основные компоненты модели AMQP?

  • Exchange: Компонент сервера Message Broker, который направляет сообщения в очереди.
  • Очередь: структура данных, используемая для хранения сообщений либо на диске, либо в памяти.
  • Связывание: набор правил, указывающих обмену, в какую очередь сообщение должно быть доставлено.

6. Продюсер Продюсер?

Производитель сообщения — это сторона, которая доставляет сообщение.

Сообщение обычно состоит из двух частей: тела сообщения (полезной нагрузки) и метки (метки).

7. Потребитель?

Потребитель сообщения, то есть сторона, которая получает сообщение.

Потребители подключаются к серверам RabbitMQ и подписываются на очереди. При использовании сообщения потребляется только тело сообщения, а тег отбрасывается.

8. Узел обслуживания брокера?

Брокер можно рассматривать как сервисный узел RabbitMQ. Как правило, следующим брокером можно считать сервер RabbitMQ.

9.Очередь?

Очередь: внутренний объект RabbitMQ, используемый для хранения сообщений. Несколько потребителей могут подписаться на одну и ту же очередь, и сообщения в очереди будут совместно использоваться (опрашиваться) несколькими потребителями для обработки.

10. Обмен Обмен?

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

11. Ключ маршрутизации RoutingKey?

Когда производитель отправляет сообщение на биржу, он указывает RoutingKey, который используется для указания правил маршрутизации сообщения.Этот RoutingKey необходимо использовать в сочетании с типом обмена и ключом привязки (BindingKey), чтобы окончательно принять эффект.

12.Обязательная привязка?

Обмен и очередь связаны привязкой, и обычно указывается BindingKey, чтобы RabbitMq знал, как правильно направлять сообщения в очередь.

13. 4 типа обменников?

Существуют в основном следующие 4 вида.

fanout: маршрутизировать все сообщения, отправленные на этот обмен, во все очереди, привязанные к этому обмену.

direct: направьте сообщение в очередь, BindingKey и RoutingKey которой точно совпадают.

topic:

Правила соответствия:

RoutingKey — это точка '.': строка с разделителями. Например: java.xiaoka.show

BindingKey и RoutingKey также являются строками, разделенными точками ".".

BindingKey может использовать * и # для нечеткого сопоставления, * соответствует слову, # соответствует нескольким или 0

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

14. Сообщения производителя работают?

1. Производитель сначала подключается к Брокеру, устанавливает соединение и открывает канал.

2. Производитель объявляет переключатель и устанавливает соответствующие свойства.

3.Производитель объявляет очередь и устанавливает соответствующие свойства.

4. Производитель связывает обмены и очереди через ключи маршрутизации.

5. Производитель отправляет Брокеру сообщение, содержащее ключи маршрутизации, биржи и другую информацию.

6. Соответствующий обмен ищет соответствующую очередь на основе полученного ключа маршрутизации.

7. Если сообщение найдено, оно будет сохранено в соответствующей очереди, если не найдено, оно будет отброшено или возвращено производителю в соответствии с конфигурацией производителя.

8. Закройте канал.

9. Управление соединениями.

15. Процесс получения сообщений потребителями?

1. Производитель сначала подключается к Брокеру, устанавливает соединение и открывает канал.

2. Попросите посредника использовать сообщение в очереди ответов и может установить функцию обратного вызова для ответа.

3. Подождите, пока брокер ответит и доставит сообщение в соответствующую очередь, чтобы получить сообщение.

4. Потребитель подтверждает полученное сообщение, акк.

5. RabbitMq удаляет определенное сообщение из очереди.

6. Закройте канал.

7. Закройте соединение.

16. Что делать бирже, если она не может найти квалифицированную очередь на основе своего типа и ключа маршрутизации?

обязательный : true, чтобы вернуть сообщение производителю.

обязательно: false, чтобы отбросить напрямую.

17. Очередь недоставленных писем?

DLX, полное название Dead-Letter-Exchange, обмен недоставленными письмами, почтовый ящик с недоставленными письмами. Когда сообщение становится недоставленным в очереди, оно может быть повторно отправлено на другой обмен, которым является DLX, а очередь, привязанная к DLX, называется очередью недоставленных сообщений.

18. Каковы причины мертвой буквы?

  • Сообщение было отклонено (Basic.Reject /Basic.Nack) с requeue = false.
  • Срок жизни сообщения истек.
  • Очередь заполнена и больше не может быть добавлено.

19. Очередь задержки?

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

20. Приоритетная очередь?

Очереди с более высоким приоритетом будут использоваться первыми.

Этого можно добиться с помощью параметра x-max-priority.

Приоритет не имеет смысла, когда потребление идет быстрее, чем производство, а Брокеры не накапливаются.

21. Механизм сделки?

В клиенте RabbitMQ есть три метода, связанных с механизмом транзакций:

channel.txSelect используется для установки текущего канала в режим транзакций.

канал .txCommit используется для фиксации транзакции.

канал. txRollback используется для отката транзакции. Если RabbitMQ аварийно завершает работу или выдает исключение по другим причинам до того, как транзакция будет зафиксирована и выполнена, она будет отброшена через txRollback.

22. Механизм отправки подтверждения?

Производитель устанавливает канал для режима подтверждения подтверждения. После настройки всем сообщениям, опубликованным путем изменения канала, будет присвоен уникальный идентификатор. Как только сообщение будет доставлено во все соответствующие очереди, RabbitMQ отправит подтверждение (Basic.Ack) производителю (содержащий уникальный идентификатор сообщения), поэтому производитель знает, что сообщение достигло соответствующего пункта назначения.

23. Как потребители получают сообщения?

  • толкать

  • тянуть

24. Как потребитель может по какой-то причине отказаться от обработки принятого в данный момент сообщения?

  • channel .basicNack
  • channel .basicReject

25. Уровень гарантии доставки сообщений?

Не более одного раза: Не более одного раза. Сообщения могут быть потеряны, а заказы повторно не передаются.

Хотя бы раз: Хотя бы раз. Сообщения не теряются, но могут передаваться повторно.

Ровно один раз: Ровно один раз, каждое сообщение должно быть передано только один раз.

26.vhost?

Каждый сервер RabbitMQ может создать виртуальный сервер сообщений, также называемый виртуальным хостом или сокращенно vhost.

По умолчанию "/".

27. Тип узлов в кластере?

Узел памяти: оперативная память, записывает изменения в память.

Дисковый узел: диск, операции записи на диск.

RabbitMQ требует как минимум один дисковый узел.

28. Структура очереди?

Обычно состоит из следующих двух частей?

rabbit_amqqueue_process : отвечает за обработку сообщений, связанных с протоколом, то есть за получение сообщений, опубликованных производителями, доставку сообщений потребителям, обработку подтверждений сообщений (включая подтверждение на стороне производителя и подтверждение на стороне потребителя) и т. д.

backing_queue: это особая форма и механизм хранения сообщений, который предоставляет соответствующие интерфейсы для запуска процесса amqqueue кролика.

29. Каковы возможные состояния сообщения в RabbitMQ?

альфа: содержимое сообщения (включая тело сообщения, свойства и заголовки) и индекс сообщения хранятся в памяти.

бета: содержимое сообщения хранится на диске, а индекс сообщения хранится в памяти.

гамма: содержимое сообщения хранится на диске, а индекс сообщения находится как на диске, так и в памяти.

delta: содержимое сообщения и индекс находятся на диске.

Ссылаться на:

«Практическое руководство по RabbitMQ»

"Углубленный RabbitMQ"

Энциклопедия Байду