20 лучших вопросов и ответов на собеседовании по RabbitMQ для программистов
20 лучших вопросов и ответов на собеседовании по RabbitMQ для программистов
Каталог статей
  • 1. Что такое КроликMQ? Зачем использовать RabbitMQ?
  • 2. Каковы преимущества и недостатки RabbitMQ?
  • 3.Сценарии использования RabbitMQ
  • 4.Основные понятия RabbitMQ
  • 5.RabbitMQ в broker Что это значит? кластер Что это значит?
  • 6、RabbitMQ в концепции channel、exchange и queue Это логическая концепция или она соответствует сущности процесса? Какую роль они играют?
  • 7 Что такое vhost? Какую роль это играет?
  • 8. На каком основании передаются сообщения?
  • 9. Как распространяются сообщения?
  • 10. Как маршрутизируются сообщения?
  • 11. Что такое метаданные? Какие типы метаданных существуют? Что включено? и cluster Каковы соответствующие метаданные? Как хранятся метаданные? метаданные в cluster Как они распределяются?
  • 12. На одном узле Множество систем node составил cluster Заявление в системе queue、exchange , и выполнить binding Какая разница?
  • 13. Как обеспечить правильную отправку сообщений в RabbitMQ?
  • 14. Как гарантировать, что получатель сообщения усвоит сообщение?
  • 15. Как гарантировать, что RabbitMQ не будет использоваться повторно?
  • 16. Как обеспечить надежную передачу сообщений RabbitMQ?
  • 17. Как обеспечить порядок сообщений RabbitMQ?
  • 18. мертвое письмоочередьи Задерживатьочередь Использование?
  • 19. Каковы недостатки использования очереди сообщений?
  • 20. Как распределяются сообщения, когда несколько потребителей прослушивают очередь?
1. Что такое КроликMQ? Зачем использовать RabbitMQ?

RabbitMQ — это промежуточное программное обеспечение для сообщений с открытым исходным кодом, написанное на Erlang и основанное на протоколе AMQP;

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

2. Каковы преимущества и недостатки RabbitMQ?

Преимущества: развязка, асинхронность, ограничение пиков;

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

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

3.Сценарии использования RabbitMQ

(1) Асинхронная связь между службами

(2) Последовательное потребление

(3) Запланированные задачи

(4) Запросить пиковое сокращение

4.Основные понятия RabbitMQ

Broker: Проще говоря, это объект сервера очереди сообщений. Exchange: Переключатель сообщений, определяющий правила, согласно которым сообщения направляются в какую очередь. Queue: Носитель очереди сообщений, каждое сообщение будет помещено в одну или несколько очередей. Binding: обязательность, его функция — установка очереди обмена согласно правилам маршрутизации обязательность Routing Key: Ключевое слово маршрутизации, Exchange доставляет сообщения на основе этого ключевого слова. VHost: vhost Можно понимать как виртуальный broker ,Прямо сейчас mini-RabbitMQ сервер. Он содержит независимые queue、exchange и binding и т. д., но самое главное, что у него есть независимая система разрешений, которая может vhost Объем пользовательского контроля. Конечно, из RabbitMQ Глобальная перспектива vhost Его можно использовать как средство изоляции различных разрешений (типичным примером является то, что разные приложения могут запускаться в разных vhost середина). Producer: Производитель сообщений — это программа, которая доставляет сообщения Consumer: Потребитель сообщений — это программа, которая принимает сообщения Channel: Канал сообщений, в каждом соединении клиента может быть установлено несколько каналов, каждый канал представляет собой задачу сеанса. Exchange, Queue и RoutingKey определяют уникальный маршрут от Exchange к очереди.

5.RabbitMQ в broker Что это значит? кластер Что это значит?

broker относится к одному или нескольким erlang node логическая группировка node бежит дальше RabbitMQ приложение. cluster находится в broker На основе node Ограничения на обмен метаданными между собой.

6、RabbitMQ в концепции channel、exchange и queue Это логическая концепция или она соответствует сущности процесса? Какую роль они играют?

Queue иметь свой собственный erlang процесс;exchange Внутренне реализовано как сохранение binding Справочная таблица каналов связи; Это организация, которая на самом деле выполняет работу по маршрутизации, Прямо сейчас отвечает за подписку routing_key Воля message доставлено в queue . Зависит от AMQP Из описания протокола видно, что канал это правда TCP виртуальные соединения поверх соединений, все AMQP Все команды передаются channel отправлено, и каждый channel Есть только один ИДЕНТИФИКАТОР. один channel Может использоваться только одним потоком операционной системы, поэтому он доставляется в конкретный channel на message Есть заказ. Однако один поток операционной системы позволяет использовать несколько channel 。

7 Что такое vhost? Какую роль это играет?

vhost Можно понимать как виртуальный broker ,Прямо сейчас mini-RabbitMQ server。Он содержит независимыеиз queueexchange и binding и т. д., но самое главное, что у него есть независимая система разрешений, которая может vhost Объем пользовательского контроля. Конечно, из RabbitMQ глобальная перспектива,vhost Его можно использовать как средство изоляции различных разрешений (типичным примером является то, что разные приложения могут запускаться в разных vhost середина).

8. На каком основании передаются сообщения?

Из-за больших затрат на создание и уничтожение TCP-соединений.,А количество параллелизма ограничено системными ресурсами.,Вызовет узкие места в производительности. RabbitMQ использует каналы для передачи данных. Канал — это виртуальное соединение, установленное внутри реального TCP-соединения.,И нет ограничений на количество каналов для каждого TCP-соединения.

9. Как распространяются сообщения?

Если на очередь подписывается хотя бы один потребитель, сообщение Воля отправляется потребителю в циклическом порядке. Каждое сообщение будет распространяться только одному подписанному потребителю (при условии, что потребитель может обработать сообщение и подтвердить его обычным способом).

10. Как маршрутизируются сообщения?

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

Когда сообщение публикуется на выключателе, сообщение Воля имеет ключ маршрутизации (routing key), устанавливается при создании сообщения. Очереди можно привязать к коммутаторам с помощью ключей маршрутизации очереди. После того, как сообщение достигнет выключателя, RabbitMQ сопоставит ключ маршрутизации сообщения со строкой Соответствующие ключи маршрутизации (для разных коммутаторов существуют разные правила маршрутизации). Если если может соответствовать очереди, сообщение будет доставлено соответствующей очередисередина, если если не может соответствовать ни одной очереди, сообщение Воля Входить; «Черная дыра».

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

  • direct:еслимаршрутизация Ключ точно совпадает,Сообщение доставляется в соответствующую очередь
  • fanout:есливыключательполучатьинформация,Воля будет транслироваться всем обязательность очереди
  • topic:Можетделатьиз разных источниковизинформацияспособен достичь того жеочередь。использоватьtopicвыключательчас,Можетиспользовать Подстановочный знак。 например:"*" Сопоставьте любой текст в определенной позиции, “.” Разделите ключ маршрутизации на несколько частей, "#" Соответствует всем правилам и т. д. Особое примечание: сообщения, отправляемые в выключатель темы, не могут произвольно устанавливать ключ выбора (routing_key) и должны состоять из серии идентификаторов, разделенных знаком ".".
11. Что такое метаданные? Какие типы метаданных существуют? Что включено? и cluster Каковы соответствующие метаданные? Как хранятся метаданные? метаданные в cluster Как они распределяются?

в Африке cluster В этом режиме метаданные в основном делятся на Queue Метаданные (очередь Имя и атрибуты и т. д.)、ExchangeЮаньданные(exchange имя、тип и атрибут и т. д.)、Binding Юаньданные(магазинмаршрутизацияреляционная таблица поиска)、VhostЮаньданные(vhost Ограничения пространства имен и настройки атрибутов безопасности для первых трех в пределах области). существовать cluster режим, также включает cluster середина node информация о местоположении node информация об отношениях. Метаданные следуют erlang node Определение типа сохраняется только в RAM середина,Все тот жечасдержатьсуществовать RAM и disk начальство。Юаньданныесуществовать cluster середина Это все node распределено.

12. На одном узле Множество систем node составил cluster Заявление в системе queue、exchange , и выполнить binding Какая разница?

Ответ: Когда вы существуете node Заявление о queue когда, пока node Если соответствующие метаданные будут изменены,вы получите Queue.Declare-ok отвечать;исуществовать cluster Заявление о queue, то требуется cluster навсе node Все метаданные должны быть успешно обновлены для получения Queue.Declare-ok отвечать. Кроме того, если node Тип RAM node Тогда измененные данные сохраняют существующую память только в том случае, если Тип disk node Тогда вам также необходимо изменить место сохранения на данных диске.

мертвое письмоочередь&мертвое письмовыключатель:DLX полное имя(Dead-Letter-Exchange),позвони этомертвое письмовыключатель,когдаинформациястатьмертвое После письма, если эта новость будет существовать, в свою очередь, параметр, то он будет отправлен на выключатель, соответствующий значению x-dead-letter-exchange. Этот выключатель называется мертвым. письмовыключатель,С этим мертвым письмовыключательобязательностьизочередьто естьмертвое письмоочередь。

13. Как обеспечить правильную отправку сообщений в RabbitMQ?

RabbitMQиспользовать Режим подтверждения отправителя,убеждатьсяинформация Правильно отправлено наRabbitMQ。 Режим подтверждения отправителя:Воля Канал настроен наconfirmмодель(Режим подтверждения отправителя),Тогда всем сообщениям, опубликованным на канале существования, будет присвоен уникальный идентификатор. Как только сообщение будет доставлено в пункт назначения, очередь,Или после записи сообщения на диск (постоянное сообщение),Канал отправит продюсеру подтверждение.(ВключатьинформациятолькоID)。еслиRabbitMQПроизошла внутренняя ошибка из-заипривести кинформацияпотерянный,отправлюnack(not acknowledged,Неподтверждено) информация. Режим подтверждения отправителя асинхронный.,Заявка производителя существует в ожидании подтверждения,Вы можете продолжить отправку информации, когда сообщение с подтверждением достигнет приложения-производителя.,Для обработки информации подтверждения будет запущен метод обратного вызова приложения-производителя.

14. Как гарантировать, что получатель сообщения усвоит сообщение?

Механизм подтверждения сообщения получателя: потребитель должен подтвердить получение каждого сообщения (прием сообщения и подтверждение сообщения — это две разные операции). Только потребитель подтверждает сообщение,RabbitMQбезопасноинформацияоточередьсерединаудалить.Супер здесь не используетсячасмеханизм,RabbitMQтолько черезConsumerизсоединятьсередина Прервите, чтобы подтвердить, требуется ли повторная отправкаинформация.такжето естьобъяснять,Пока связь не разорвана,RabbitMQотдалConsumerдостаточно долгоизчасвремя для обработкиинформация.

Вот некоторые особые ситуации:

  • если потребитель получает сообщение,существуют Отключитесь или отмените подписку перед подтверждением,RabbitMQ подумает, что сообщение не было распространено.,Затем перераспределите следующему подписанному потребителю. (Могут существовать скрытые опасности повторного потребления существующих,Нужно удалить дубли по bizId)
  • если потребитель получает сообщениено нет подтвержденияинформация,Соединение не разрывается,RabbitMQ считает, что потребитель занят,Воля не будет распространять дополнительную информацию этому потребителю.
15. Как гарантировать, что RabbitMQ не будет использоваться повторно?

Давайте сначала поговорим о том, почему происходит повторное употребление: при нормальных обстоятельствах.,Когда потребители существуют, потребляют новости,После употребления,На сообщение будет отправлено подтверждающее сообщение.,messageturn будет знать, что сообщение было использовано,Сообщение будет удалено из сообщения очередисередина;

Однако из-за сбоев передачи данных по сети и т. д.,Информация о подтверждении не была доставлена ​​в сообщение.,В результате сообщение, в свою очередь, не знает, что оно уже использовало сообщение.,И снова сообщение распространяется среди других потребителей.

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

Например: существует, записывает сообщение, используя данные в качестве единственного идентификатора.,При потреблении сообщений,Определите, было ли оно использовано, на основе уникального идентификатора;

16. Как обеспечить надежную передачу сообщений RabbitMQ?

Ненадежные сообщения могут быть вызваны потерей сообщения, его перехватом и т. д.;

Потери далее подразделяются на: потерю сообщений производителя, потерю сообщений в списке сообщений и потерю сообщений потребителем;

Производитель теряет сообщения: с точки зрения производителя, теряющего данные, RabbitMQ поставлять transaction и confirm Шаблон, гарантирующий, что производители не потеряют сообщения;

transaction Механизм такой: перед отправкой сообщения запустите транзакцию (channel.txSelect()), Затем отправьте сообщение, и если в процессе отправки возникнет какое-либо исключение, транзакция будет отменена (channel.txRollback()), Если отправка прошла успешно, зафиксируйте транзакцию (channel.txCommit()). Однако у этого подхода есть недостаток: снижается пропускная способность;

confirm Наиболее часто используемый режим: один раз channel Входить confirm режиме всем сообщениям, опубликованным на этом канале, будет присвоен уникальный идентификатор (от 1 Старт), как только сообщение будет опубликовано во всех соответствующих очередях;

RabbitMQ отправит производителю ACK (содержащий уникальный идентификатор сообщения), что позволит производителю узнать, что сообщение правильно прибыло в очередь назначения;

Если RabbitMQ не сможет обработать сообщение, он отправит вам сообщение Nack, и вы сможете повторить операцию.

Очередь сообщений теряет данные: сохранение сообщений.

Чтобы справиться с ситуацией потери данных в очереди сообщений, обычно необходимо включить настройку постоянного диска.

Эта конфигурация персистентности может confirm В сочетании с этим механизмом вы можете сохранить сообщение на диске, а затем отправить его производителю. Ack Сигнал.

Таким образом, если RabbitMQ умрет до того, как сообщение будет сохранено на диске, производитель не получит сигнал Ack и автоматически отправит сообщение повторно.

Так как же это сохранить?

Кстати, это на самом деле очень просто, достаточно выполнить следующие два шага:

  1. Если для постоянного идентификатора константы очереди установлено значение true, он представляет собой постоянную очередь.
  2. При отправке сообщения Воля DeliveryMode=2

После установки этого,Прямо сейчасделать rabbitMQ Если он зависнет, данные можно будет восстановить после перезагрузки.

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

После того, как потребитель существует, получит сообщение,Перед обработкой сообщения,Автоматически ответит RabbitMQ Сообщение получено;

Если в этот момент обработка сообщения завершится неудачно, оно будет потеряно;

Решение. После успешной обработки сообщения вручную ответьте подтверждающим сообщением.

17. Как обеспечить порядок сообщений RabbitMQ?

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

18. мертвое письмоочередьи Задерживатьочередь Использование?

Сообщение о мертвом письме:

Сообщение отклонено (Basic.Reject или Basic.Nack), а для параметра requeue установлено значение false. Срок действия сообщения истек Очередь достигла максимальной длины

Просроченная новость:

существовать rabbitmq Существует два способа установить срок действия сообщения. Первый — установить срок действия сообщения. После этой настройки будет установлен срок действия сообщения. ьсередина Все сообщения имеют одинаковый срок действия. Второй способ — установить само сообщение, поэтому срок действия каждого сообщения разный. Если вы используете эти два метода одновременно, значение с меньшим сроком действия будет иметь преимущественную силу. Когда срок действия сообщения истекает и оно не было использовано, оно становится мертвое письмо информация.

Настройки очереди: существованиеповорот используется, когда вы делаете заявление x-message-ttl Параметр, единица измерения миллисекунда

Индивидуальные настройки сообщений: Это установка свойств сообщения expiration Значение параметра, в единицах миллисекунда

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


Имея базовые знания на, мы выполняем следующие требования:

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

анализировать:

1. В приведенной выше ситуации мы можем использовать очередь задержки для ее реализации. Итак, как создать очередь задержки? 2. Очередь задержки может быть Просроченная новость+мертвое письмоочередь Приходи время 3. Просроченные сообщения устанавливаются через очередьсередина. x-message-ttl Реализация параметра 4、мертвое письмоочередьпроходитьсуществоватьочередь Заявлениечас,Установить на поворот x-dead-letter-exchange параметры, а затем дополнительно объявить очередь, привязанную к обмену, соответствующему x-dead-letter-exchange.

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

1. Снижение доступности системы: что вы думаете?,Первоначально, пока другие системы работали нормально,,Тогда ваша система в норме. Теперь вам нужно добавить сообщение в свою очередь,Эта новостная очередь мертва,Ваша система больше не работает должным образом. поэтому,Сниженная доступность системы

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

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

Если у потребителя есть x сообщений и он не отвечает на ACK, этому потребителю больше не будут отправляться сообщения.

Язык кода:javascript
копировать
channel.basicQos(int x)

Я не знаю, любишь ли ты солнечные дни или дождливые, но ты мне нравишься каждый день.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose