Всем привет, я Сяоюй
То, что я приношу вам сегодня, касается кроликаRabbitMQстратегия развития России,RabbitMQ
серединаRabbit
дакроликЭто значит бежать со скоростью кролика. Это легкий сервер с высокой доступностью, поддерживающий несколько протоколов обмена сообщениями.очередь сообщений. RabbitMQ созданErlang
язык, а язык Erlang идеально подходитВысокий параллелизмязык.
Вам очень нравится маленький кролик?Милый маленький кролик играет роль старшего брата в нашей работе.Не будет преувеличением сказать, что это нынешний любимец Али. Я представил RabbitMQ раньше, так что же означает MQ? На самом деле, все, кто знаетMessage Queue
Сокращение для , официальными словами RabbitMQ — этоСистема очереди сообщений с открытым исходным кодом. Давайте проследим за Сяоюй и посмотрим, как вырос этот маленький кролик.
предисловие
Сейчас на рынке есть много основных MQ, таких какActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ
Ждать.
Alibaba также сначала использовала ActiveMQ, но с непрерывным развитием бизнеса модуль ввода-вывода ActiveMQ имел узкое место. Позже Alibaba прошла серию оптимизаций, но все еще не могла решить ее очень хорошо. После этого Alibaba сосредоточила свое внимание на промежуточном программном обеспечении основного сообщения.kafka
выше, но кафка не отвечает их требованиям, тем болееНизкая задержка и высокая надежность.
Поэтому RocketMQ стоит на плечах гигантов (kafka), и оптимизирует его, чтобы сделать более подходящим для особенностей интернет-компаний.
Как очень популярное промежуточное ПО для сообщений, RabbitMQ имеет очень богатые возможности и преимущества:Высокая надежность, гибкая маршрутизация, высокая степень расширения кластера, высокая доступность, поддержка нескольких протоколов, поддержка нескольких клиентов и богатая система подключаемых модулей..
RocketMQ в настоящее время широко используется в Alibaba Group.Транзакции, перезарядка, потоковые вычисления, отправка сообщений, обработка потока журналов, распространение binglogсцена.
концепция
RabbitMQ — это язык Erlang.AMQP
реализация с открытым исходным кодом.
AMQP: расширенная очередь сообщений,Расширенный протокол очереди сообщений. Это открытый стандарт протокола прикладного уровня, разработанный для промежуточного программного обеспечения, ориентированного на сообщения.Клиенты и промежуточное программное обеспечение сообщений, основанные на этом протоколе, могут передавать сообщения и не ограничиваются продуктами, языками разработки и другими условиями.
Первоначально RabbitMQ возник в финансовой системе для хранения и пересылки сообщений в распределенных системах.Простота использования, масштабируемость, высокая доступностьи так далее показали себя хорошо.
сцены, которые будут использоваться
Разделение приложений
возьми то, что мы часто говоримсистема заказовНапример, система заказов обычно вызывает интерфейс системы инвентаризации. следующим образом:
Это решение вызовет много проблем.Когда система инвентаризации недоступна, сокращение запасов нашей системы заказов не удастся.
когда мы использовалиочередь сообщенийПосле того, как пользователь разместит заказ, система заказовупорство, запишите сообщение в очередь сообщений и верните сообщение об успешном размещении заказа пользователем; подпишитесь на сообщение о заказе, используйте метод извлечения/проталкивания для получения информации о заказе, и система инвентаризации выполняет операции инвентаризации в соответствии с информацией о заказе.
Таким образом, даже если при размещении заказа возникает проблема с системой инвентаризации, это не повлияет на нормальное размещение заказа, потому что после размещения заказа система заказов записывается в очередь сообщений, а другие операции не касается, и система заказа и система инвентаризации реализованы.Разделение приложений.
Асинхронная обработка
возьми нашРегистрация пользователяНапример, пользователям необходимо отправить регистрационное электронное письмо и регистрационное SMS после регистрации. следующим образом:
Серийный режим:
Параллельный режим:
Когда мы используем очередь сообщений, бизнес-логика больше не нужна, простоАсинхронная обработка. следующим образом:
Отсечение трафика
Возьмем нашу часто упоминаемуюшипНапример, каждый должен был испытать Double 11 на Tmall и Taobao.В это время мы внезапно увеличим спрос в секунду в определенное время, например, в 0:00 вечера.Если мы не обновим структуру системы, это Это те, кто не выдержит столько запросов, сразу сломают систему.
После того, как мы воспользуемся очередью сообщений, в этомПиковый периодКогда заходит много пользователей, например, каждую секунду5
Тысячи запросов, нам просто нужно поставить это5
Тысячи запросов помещаются в очередь сообщений, и система обрабатывает их каждую секунду2
Для тысяч запросов соответствующее число будет извлечено из очереди сообщений, и только это количество будет обрабатываться в секунду.2
Тысячи запросов. Таким образом, в течение периода времени, пока длится всплеск, их будет сотни тысяч и более.Запросы помещаются в очередь сообщенийвнутри. Ведь всплеск бывает только на короткий промежуток времени, после его прохождения в очередь сообщений могут поступать десятки или сотни запросов в секунду. Однако система также будет2
Тысячи запросов обрабатываются на скорости. Итак, когда спайк закончится, система поставит этиОстальные сообщения потребляются.
Главная особенность
Надежность: RabbitMQ использует некоторые механизмы для обеспечения надежности, такие какПостоянство, подтверждение передачи, подтверждение выпуска.
Гибкая маршрутизация: сообщения направляются через Exchange до того, как они попадут в очередь. Для типичной функциональности маршрутизации RabbitMQ уже предоставляет некоторыевстроенныйизExchange
реализовать. Для более сложных функций маршрутизации вы можете использоватьнесколькоОбмен связан вместе, в том числе черезМеханизм плагинаВнедрите свой собственный Exchange.
Кластеризация: несколько серверов RabbitMQ могут формировать кластер для формирования логическойBroker
.
Высокодоступные очереди: очереди можно запускать на машинах в кластере.зеркало, чтобы очередь оставалась доступной, даже если некоторые узлы вышли из строя.
Многопротокольность: RabbitMQ поддерживает различные протоколы очереди сообщений, такие какSTOMP、MQTT
и т.п.
Много клиентов: RabbitMQ поддерживает почти все распространенные языки, такие какJava、.NET、Ruby
и т.п.
Пользовательский интерфейс управления: RabbitMQ предоставляет простой в использовании пользовательский интерфейс, который позволяет пользователямОтслеживайте и управляйтеМногие аспекты Message Broker.
Трассировка: если сообщение является ненормальным, RabbitMQ предоставляетмеханизм отслеживания сообщений, пользователь может узнать, что произошло.
Система плагинов: RabbitMQ предоставляет множествоплагин, который можно расширять многими способами, а также вы можете писать свои собственные плагины.
Модель архитектуры
Message
сообщение, сообщение анонимно, оно состоит иззаголовок сообщения и тело сообщениясочинение. Тело сообщения непрозрачно, а заголовок сообщения состоит из ряда необязательных атрибутов, в том числеrouting-key
(ключ маршрутизации),priority
(приоритет относительно других сообщений),delivery-mode
(указать, что сообщение может потребовать постоянного хранения) и т. д.
Publisher
Продюсер новостей такжеОпубликовать сообщение на биржеклиентское приложение.
Exchange
переключиться наперениматьПроизводители отправляют сообщения и направляют эти сообщения в очереди на сервере.
Binding
Привязки для очередей сообщений и обменовАссоциация. Привязка — это правило маршрутизации, которое соединяет обмен и очередь сообщений на основе ключа маршрутизации, поэтому обмен можно понимать как привязку, состоящую изтаблица маршрутизации.
Queue
Очередь, внутренний объект RabbitMQ, используемый для хранения сообщений.контейнер, также является концом сообщения. Сообщение можно поместить водин или большеочередь. Сообщение было в очереди внутри, ожидание подключения потребителей к очереди удалит его.
Connection
подключение к сети, напримерTCP
соединять.
Channel
канал, независимый в мультиплексном соединениидвунаправленный поток данныхряд. канал основан на реальныхTCP
Виртуальное подключение материкового Китая,AMQP
Команды отправляются через каналы, будь то публикация сообщений, подписка на очереди или получение сообщений, все эти действия выполняются через каналы. Потому что для операционной системы создавать и уничтожатьTCP
очень дорогие накладные расходы, поэтому вводится понятие каналамультиплексодинTCP
соединять.
Consumer
Потребитель сообщения, то есть получатель сообщения из очереди сообщений.клиентское приложение.
Virtual Host
Виртуальный хост, представляющий набор обменов, очередей сообщений и связанных объектов. веб-хостингобщийта же среда аутентификации и шифрованияДомен автономного сервера.
Broker
Представляет сервер очереди сообщенийорганизация.
Тип обмена
Когда Exchange распространяет сообщения, существуют разные стратегии распространения в зависимости от типа. В настоящее время существует четыре типа:direct、fanout、topic、headers
. заголовки совпадаютAMQP
Новостиheader
вместо ключей маршрутизации, дополнительно обмен заголовками и прямой обменточно так же, но производительность намного хуже, и он почти не используется в настоящее время, поэтому смотрим непосредственно на остальные три типа:
Прямое распространение ключей
Директ: в сообщенииключ маршрутизации(ключ маршрутизации) if и Binding inbinding key
Если они совпадают, биржа отправляет сообщение в соответствующую очередь. этоточное совпадение, одноадресная передачарежим.
Мы отправляем сообщение на Exchange с routingKey="error", сообщение будет перенаправлено наQueue1
(amqp.gen-S9b…, предоставленный RabbitMQСоздано автоматическиИмя очереди) и Queue2 (amqp.gen-Agl…); если мы отправим сообщение с routingKey="info" или routingKey="warning", сообщение будет перенаправлено только в Queue2. Если мы отправим сообщение с другим ключом маршрутизации, сообщение не будет перенаправлено в эти две очереди.
Fanout
Разветвление: Каждое сообщение, отправленное на обмен типа разветвления, будетназначается всем связанным очередямподниматься. Как и при широковещании подсети, узлы в каждой подсети получают копию сообщения. Сообщение о пересылке типа разветвлениясамый быстрый.
Все сообщения, отправленные издателем-производителем на Exchange, будутмаршрутизацияк двум на рисункеQueue
, и в конечном итоге потребляется двумя потребителями (Consumer1 и Consumer2).Потребление.
обмен темами
обмен темами: обмен темами черезсопоставление с образцомНазначьте атрибут ключа маршрутизации сообщения и сопоставьте ключ маршрутизации с шаблоном.связыватьк шаблону. Он направит ключ и привяжет ключевую строкуСегментацияСоответствующие слова, эти слова отделяются от точки. Он также идентифицирует два подстановочных знака: символы#
" и символ "".# соответствует0
одно или несколько слов, совпадающих не более чем с одним словом.
Наше сообщение routingKey=”quick.orange.rabbit” будетОдновременная маршрутизацияприбытьQ1
а такжеQ2
M RUTIGHTY = «LAZY.ORANGE.FOX» будет направленоQ1
, сообщение с routingKey="lazy.brown.fox" будет перенаправлено наQ2
, сообщение с routingKey="lazy.pink.rabbit" будет перенаправлено наQ2
(будет доставлено только во 2 кв.однажды, хотя этот routingKey такой же, какQ2
Обе привязкиКлючисоответствовать); сообщения с routingKey="quick.brown.fox", routingKey="orange", routingKey="quick.orange.male.rabbit" будутвыбросить, потому что они не совпадают ни с однимbindingKey
.
шаги установки
Вообще говоря, вам нужно установить перед установкой RabbitMQErlang
, вы можете перейти на официальный сайт Erlang для загрузки. Затем перейдите на официальный сайт RabbitMQ, чтобы загрузить установочный пакет, а затем распакуйте его. В зависимости от операционной системы официальный сайт предоставляет соответствующие инструкции по установке:Windows、Debian / Ubuntu、RPM-based Linux、Mac
ссылка на скачивание
https://www.rabbitmq.com/releases/rabbitmq-server/
скачать
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
Установить
tar -xvf rabbitmq-server-generic-unix-3.6.15.tar.xz
настроить
vim /etc/profile最后加上 export PATH=$PATH:/opt/rabbitmq/rabbitmq_server-3.6.15/sbin 根据自己的安装路径来
сделать изменения эффективными
source /etc/profile
Исправлятьhosts
vim/etc/hosts
запускать
cd /opt/rabbitmq/rabbitmq_server-3.6.15/sbin/./rabbitmq-server -detached 注意需root用户启动
Проверить успешность запуска
./rabbitmqctl status
Это успешно, если вы хотите получить к нему удаленный доступ
./rabbitmq-plugins enable rabbitmq_management就可以访问了(非本机访问请关闭防火墙)
доступ
Демонстрация проекта Springboot
Интегрировать RabbitMQ с Springboot очень просто.spring-boot-starter-amqp
Различная поддержка сообщений.
настроитьpom
файл, в основном для добавления spring-boot-starter-amqpслужба поддержки
Демонстрация кода:
настроитьapplication.properties
файл, который настраивает rabbitmqАдрес установки, порт и информация об учетной записи
Демонстрация кода:
Настроить очередь
Демонстрация кода:
отправитель
Демонстрация кода:
получатель
Демонстрация кода:
тестовое задание
Демонстрация кода:
Встроенный кластер
Одна из Rabbitmq — одна из лучших функцийВстроенный кластер, эта функция предназначена для того, чтобы потребители и производители моглиПродолжить работу в случае сбоя узла, и добавляя больше узлов вЛинейное масштабирование пропускной способности обмена сообщениями. RabbitMQ внутренне использует распределенную коммуникационную структуру, предоставляемую Erlang.OTP
Чтобы удовлетворить эти потребности, клиент в случае потери узла, подключенного к RabbitMQ, имел возможность повторно подключиться к любому другому узлу в кластере.Продолжайте создавать и потреблять сообщения.
В кластере RabbitMQОбщие понятия:
Метаданные очереди: включаетимя очередиС нимиАтрибуты, например, является ли он постоянным, удаляется ли он автоматически
Метаданные обмена: Обменимя,Типы,Атрибуты
Связывание метаданных: внутрилистЗадокументируйте, как сообщения направляются в очереди
метаданные vhost: обеспечивают очереди, обмены, привязки внутри vhostПространства имен и атрибуты безопасности
Технический отбор
В нашей обычной разработке различные очереди сообщений MQДумая о выборе:
Если пользовательский трафик находится в пределах доступности ActiveMQ и действительно в основном основан наРазвязка и асинхронностьиспользовать, вы можете рассмотретьActiveMQ
, что также ближе к привычкам использования Java-инженерами, но теперь ActiveMQ прекратил обслуживание, и ActiveMQПараллелизм не высок,такОпределенный объем бизнесаможно рассматривать для использования.
Как чистокровное промежуточное ПО для сообщений, RabbitMQ имеетРасширенный протокол обмена сообщениями AMQP
Он незаменим в промежуточном программном обеспечении сообщений, но язык erlang мешает нам глубоко исследовать и контролировать.Для компании базовая технология не может контролироваться, но онаОткрытый исходный кодДа, есть сравнениестабилизироватьПоддержка также высока.
Если у вас есть абсолютная уверенность в технической мощи вашей компании, вы можете использовать ееRocketMQ
, но RocketMQ родился относительно поздно, иОбновление итерации быстро, а это значит, что в процессе использования может быть много подводных камней, поэтому, если технология Java в вашей компании не очень сильна, использовать ее не рекомендуется.
Малые и средние компании, техническая сила относительно общая, а технические проблемы не особенно высоки.ActiveMQ、RabbitMQ
хороший выбор;большая компания, сила исследований и разработок в области инфраструктуры сильна, сRocketMQ
хороший выбор
еслиПоле больших данныхвычисления в реальном времени, сбор журналов и другие сценарии, используйтеKafka
Это отраслевой стандарт, абсолютно никаких проблем,Сообщество очень активно, является практически нормой де-факто в этой области во всем мире.
отпредставлениеИз вышеизложенного производительность промежуточного программного обеспечения сообщений (Kafka, RokcetMq), использующего файловую систему, является лучшей, поэтому промежуточное программное обеспечение сообщений, основанное на хранилище файловой системы, является тенденцией развития. (отХранение и эффективностьСм. Файловая система > Хранилище KV > Реляционная база данных)
наконец
Что касается очередей сообщений, то, по сути, они в основном одинаковы, и использование в основном такое же, за исключением того, что каждая очередь сообщений с открытым исходным кодомФокуснемного отличается, мы должныТребования к проектуЧтобы решить, какую очередь сообщений мы должны выбрать для обслуживания нашего проекта, работа по выбору этого проекта обычно находится на ранней стадии исследований и разработок.лидер группыМы уже решили, какой из них использовать, обычно это не наша очередь, но мы можем проверить соответствующие знания во время интервью, поэтому мы все должны иметь дело с такими очередями сообщений.Понимать и уметь гибко использовать.