1. Пишите впереди
Любой, кто использовал распределенное промежуточное программное обеспечение, знает, что его использование несложно для программистов, и существует всего несколько часто используемых клиентских API, которые намного меньше, чем API, которые мы используем в повседневном программировании. Однако распределенное ПО промежуточного слоя мало используется в малых и средних командах, занимающихся исследованиями и разработками, почему?
Причина в том, что обязанности промежуточного программного обеспечения относительно едины.Хотя использование клиента простое, настроить всю среду непросто. Поэтому в нескольких статьях по промежуточному ПО в этой серии мы сосредоточимся на решении пороговой проблемы, настройке серверной среды (которая может быть решена в облаке или эксплуатации и обслуживании позже), ознакомлении с основными обязанностями и функциями промежуточного ПО, а также ознакомлении с Демонстрация клиента После того, как она написана, дайте программисту поднять ногу, и вы сможете легко приступить к отладке кода.
Согласно нашему опыту за последние несколько лет, первый контакт также может быть самостоятельным и быстрым обучением.Статьи и демонстрации в основном практичны.Ниже приводится краткое введение и применение очереди сообщений RabbitMQ.
2. Зачем использовать очередь сообщений MQ
1. Бизнес-системы часто требуют особенно сильной реакции, которая может сыграть роль в сокращении пиков и заполнении падений.
2. Развязка: если одна система зависнет, это не повлияет на дальнейшую работу другой системы.
3. Бизнес-системы часто имеют высокие требования к надежности сообщений, а также требования к сложным функциям, таким как Ack.
4. Расширьте возможности асинхронной обработки бизнес-системы и уменьшите или даже почти полностью исключите параллелизм:
Использование очередей сообщений похоже на строительство плотины Гэчжоу для борьбы с наводнениями: оно позволяет накапливать большие объемы данных, а затем надежно выводить их в асинхронном режиме. Например:
Традиционный подход имеет следующие проблемы, как показано на рисунке выше:
- Как только время обработки бизнеса превысит интервал таймера, это приведет к пропущенным заказам.
- Если для получения данных используется новый поток, сервер будет подвержен простою из-за обработки большого количества вновь открытых потоков.
- База данных находится под высоким давлением и склонна к параллелизму.
Преимущества использования MQ смотрите на картинке выше:
- Бизнес можно зарегистрировать и настроить.
- Правила получения данных настраиваются.
- Только сообщения в MQ будут подтверждены при успешном использовании, что повышает надежность.
- Значительно расширяет возможности асинхронной обработки бизнес-заданий:
После регулярного получения данных из базы данных они сохраняются в очереди сообщений MQ, а затем задание будет периодически сканировать очередь сообщений MQ.Предположим, задание выполняет предварительную выборку 5 сообщений после сканирования, а затем обрабатывает эти 5 сообщений асинхронно, что означает что эти 5 сообщений могут обрабатываться одновременно.
3. Введение в RabbitMQ
RabbitMQ — это компонент сообщений с открытым исходным кодом, реализованный на основе AMQP, который в основном используется для хранения и пересылки сообщений в распределенных системах.Он написан на языке Erlang, который славится своей высокой производительностью, высокой доступностью и высокой расширяемостью.
Среди них AMQP (Advanced Message Queuing Protocol, Advanced Message Queuing Protocol) — спецификация протокола прикладного уровня, используемая для асинхронной доставки сообщений, разработанная для промежуточного программного обеспечения, ориентированного на сообщения.
Возможности RabbitMQ следующие:
Высокая надежность: RabbitMQ предоставляет множество функций, позволяющих найти компромисс между надежностью и производительностью, включая постоянство, отправку ответов, публикацию подтверждений и высокую доступность.
очередь высокой доступности: Поддерживает межмашинную кластеризацию и поддерживает резервное копирование зеркала безопасности очереди.Независимо от того, на какой стороне отправителя и получателя сообщений возникают проблемы, это не повлияет на нормальную отправку и получение сообщений.
гибкая маршрутизация: Все сообщения будут пересылаться в каждую очередь сообщений через маршрутизатор. RabbitMQ имеет несколько встроенных широко используемых маршрутизаторов и может выполнять сложные функции маршрутизации за счет комбинации маршрутизаторов и пользовательских подключаемых модулей маршрутизатора.
Поддержка нескольких клиентов: Существуют клиентские реализации для основных языков разработки (таких как: Python, Ruby, .NET, Java, C, PHP, ActionScript и т. д.).
кластер: Несколько серверов в локальной сети могут быть объединены вместе для формирования логического брокера.
Расширяемость: Поддерживает балансировку нагрузки, просто и удобно динамически увеличивать или уменьшать количество серверов.
управление полномочиями: Гибкое управление правами ролей пользователей, виртуальный хост — это наименьшая степень детализации управления правами.
Система плагинов: Поддерживает различные расширенные подключаемые модули, а также настраиваемые подключаемые модули. Наиболее часто используемым подключаемым модулем является инструмент веб-управления RabbitMQ_Management, а его адрес доступа к веб-интерфейсу:
Аккаунт для входа: Flight, пароль: yyabc123.
В-четвертых, принцип работы RabbitMQ
Поток сообщений от отправителя к получателю — это рабочий механизм сообщений RabbitMQ, как показано на следующем рисунке:
Рабочий механизм отправки и получения сообщений
5. Базовое использование RabbitMQ
Существует 6 основных вариантов использования: один-к-одному, один-ко-многим, режим публикации-подписки, отправка и получение в соответствии с правилами маршрутизации, топик, RPC (то есть вызов удаленного хранилища). Мы рассмотрим использование «один-к-одному», «один-ко-многим» и темы.
1,один на один: Одиночная отправка, однократное получение. См. изображение ниже.
2,один ко многим: один отправитель, несколько получателей, например распределенная диспетчеризация задач. Смотрите изображение ниже:
3.тема: Тип обмена — тема. При отправке сообщения необходимо указать коммутатор и ключ маршрутизации. Очередь сообщений потребителя привязана к коммутатору и соответствует ключу маршрутизации для подписки на сообщения. После подписки сообщения можно получать. Потребитель может получить сообщение только в том случае, если очередь привязана к обмену и указанный ключ маршрутизации соответствует правилам сопоставления.
Ключ маршрутизации может быть установлен в виде подстановочного знака, например: * или # (* означает соответствие слову в ключе маршрутизации, # означает, что может быть получено любое сообщение ключа маршрутизации). Если ключ маршрутизации состоит из нескольких слов, используйте . для разделения слов.
Соглашения об именах:
Предложение по именованию для имени обмена: Ex{AppID}.{custom ExchangeName}, предложение по именованию для имени очереди: MQ{AppID}.{custom QueueName} .
6. Загрузка демоверсии и дополнительная информация
Адрес загрузки RabbitMQDemo:GitHub.com/intent 2017/раба…
Официальный сайт RabbitMQ:www.rabbitmq.com
Список контента, задействованного в этой серии статей, выглядит следующим образом (опубликовано не в таком порядке).Если вам интересно, обратите внимание:
- Открытие:Три ключевых момента практики структуры команды малых и средних НИОКР
- Кэш Редис
- очередь сообщений RabbitMQ
- Централизованный журнал ELK
- Планирование задач
- Метрики мониторинга приложений
- Платформа микросервисов MSA
- Инструмент поиска Solr
- Распределенный координатор ZooKeeper
- Гаджет: Dapper.NET/EmitMapper/AutoMapper/Autofac/NuGet
- Инструмент публикации Jenkins
- Общий архитектурный проект:Как электронная коммерция влияет на общую структуру предприятия?
- Единый архитектурный проект
- Унифицированное многоуровневое приложение:Как стандартизировать все прикладные уровни в компании?
- Инструмент отладки WINDBG
- войти
- Корпоративный платежный шлюз
- Вывод
об авторе
Чжан Хуэйцин, ветеран ИТ с более чем 10-летним стажем, последовательно работал архитектором Ctrip, главным архитектором Guda Group, техническим директором Zhongqing Yiyou и т. д., а также руководил модернизацией и преобразованием технической структуры двух компаний. Теперь сосредоточьтесь на архитектуре и инженерной эффективности, сочетании и интеграции технологий и бизнеса, ценности технологий и инновациях.
Ян Ли, имеет многолетний опыт в исследованиях и разработках систем интернет-приложений, работал в Guda Group, а сейчас работает системным архитектором Zhongqing Yiyou, в основном отвечая за архитектурный дизайн бизнес-системы центра исследований и разработок компании и накопления и обучение новым технологиям. На данном этапе основное внимание уделяется программному обеспечению с открытым исходным кодом, архитектуре программного обеспечения, микросервисам и большим данным.
благодарныйЮтада ХикаруОбзор этой статьи.