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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.