, Всё что требуется для RabbitMQ

Всё что требуется для RabbitMQ

Ловайса Йохансон

Дэйвид Доссо

 

Первая публикация на английском языке: Апрель 2014

Второе издание на английском языке: Август 2020

Ссылка на продукт: 1070820

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

При подготовке этой книги были предприняты все усилия чтобы гарантировать точность представленной информации. Тем не менее, информация, содержащаяся в этой книге, продаётся без гарантии в явном или неявном виде. Ни авторы, ни Packt Publishing, ни их дилеры и дистрибьюторы не будут нести ответственность за любые убытки, вызванные или предположительно вызванные прямо или косвенно этой книгой.

Packt Publishing пыталась предоставить информацию о товарных знаках обо всех компаниях и продуктов, упомянутых в данной книге для надлежащего использования капиталов. Тем не менее, Packt Publishing не может гарантировать точность этой информации.

Опубликовано Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK

ISBN 978-1-78913-166-6

www.packtpub.com

2020-08-26

 Состав исполнителей

Авторы
Ловайса Йохансон
Дэйвид Доссо
Редактор ввода в эксплуатацию
Кунал Чаудхари
Редактор приобретения
Адайти Гур
Редактор разработки содержимого
Натанья Диас
Главный редактор
Айаан Хоуда
Технический редактор
Уткарша С. Кэйдам
Литературный редактор
Safis Editing
Координатор проекта
Айшвэйря Моухан
Корректор
Safis Editing
Составитель указателя
Тиджал Дэйрувэйл Сони
Технолог
Эйлишон Мендонка

 Об авторах

Ловайса Йохансон ежедневно работала с RabbitMQ на протяжении многих лет. Через CloudAMQP её компания 84codes предлагает управление кластерами RabbitMQ. Обладая 50 000+ запущенными экземплярами, они рассматриваются как самый большой поставщик в мире RabbitMQ в качестве службы. Ловайса искушённый разработчик со степенью магистра вычислительных наук и инженерии. Благодаря своей работе она продолжает писать наиболее популярное и широко распространённое образовательное содержание на тему RabbitMQ и иногда делится этими знаниями в качестве докладчика на различных конференциях.

Основные идеи этой книги основаны на передовых навыках и опыте команды 84code, основанной в Швеции в 2012 году. Команда 84codes обладает большим опытом в тех преимуществах, проблемах и возможностях, которые предоставляют архитектуры очередей сообщений. Мы стремимся предоставить разработчикам простую облачную инфраструктуру, благодаря которой и появилась данная книга. Особая благодарность экспертам, которые предоставили ценные знания, включая Антона Далгрена, Даниэля Марклунда, Элина Винка, Эндрю Эванса и Анджелу Олсон.

Дэйвид Доссо работал инженером- программистом и архитектором на протяжении более 18 лет. Он применял RabbitMQ начиная с 2009 во множестве различных контекстов. Он выступает основным участником в AMQP транспорте Mule. Он сосредоточен на построении распределённых и масштабируемых приложений стороны сервера для JVM и Erlang VM. Он участник IEEE, Computer Society и AOPA, также держатель диплома Production Systems Engineering ESSTIN.

Он чемпион Mule и Наиболее ценный блоггер DZone. Он участвует во многих проектах с открытым исходным кодом и любит помогать людям в Stack Overflow. Он также выступает судьёй ежегодного конкурса по программному обеспечению Jolt Awards.

 Рецензент

Гектор Вейга Ортиз является инженером программного обеспечения, специализирующийся на приложениях данных реального масштаба времени. В последнее время он сосредоточил свою работу на различных облачных технологиях, таких как AWS и Kubernetes, в качестве разработки и запуска масштабируемых, эластичных и высоко производительных систем, которые способны обрабатывать данные реального масштаба времени с большим объёмом. Он обладает степенью магистра в Телекоммуникационной инженерии Политехнического университета Мадрида, а также степенью магистра по информационным технологиям и управлению Иллинойсского технологического института. В настоящее время он работает в HERE Technologies, где он разрабатывает масштабируемые приложения для обслуживания обмена данными в реальном масштабе времени по всему миру. Гектор также технический рецензент RabbitMQ Cookbook и был автором Akka Cookbook, причём обе были изданы Packt Publishing.

 www.PacktPub.com

 Предисловие

RabbitMQ это брокер сообщений, предоставляющий некую коммуникационную структуру между компонентами и службами. Благодаря AMQP (Advanced Message Queuing Protocol) и всем доступным клиентским библиотекам RabitMQ, большинство основных языков программирования и служб способны совместно и бесшовно работать, причём неким асинхронным образом.

Эта книга вскрывает мощные возможности RabbitMQ погружаясь в основные посредством путешествия пользователя Complete Car (CC), вымышленной компании диспетчерезации такси с требованиями пользователя из реальной жизни.

 Для кого эта книга

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

 Что охватывает эта книга

Глава 1. Как оживает Rabbit, некое введение в RabbitMQ, как начинать и преимущества очередей сообщений. Эта глава далее проинструктирует вас как установить и настроить RabbitMQ и подготовит для продвижения вперёд в разработке приложений.

Глава 2. Создание приложения Такси, обсуждает создание простого приложения заказа такси при помощи RabbitMQ. К концу этой главы, как ожидается, вы получите представление того как подключаться к RabbitMQ, публиковать прямые и тематические обмены, а также потреблять сообщения из очередей. Эта глава также поясняет подтверждения и отрицательные подтверждения (acks и nacks - acknowledgments and negative acknowledgments) сообщений.

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

Глава 4. Настройка доставки сообщений, посвящена TTL (time-to-live, времени жизни) сообщений, использованию истечения срока действия названия свойства сообщения и прочие важные темы касательно настройки доставки сообщений, включая обмен не доставленными сообщениями и очереди.

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

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

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

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

 Как получить от этой книги больше пользы

Как установить RabbitMQ в Ubuntu или через Docker поясняется в Главе 1. Как оживает Rabbit. Она также даёт представление от том как настраивать размещённую у поставщика версию RabbitMQ через CloudAMQP.

основной код этой книги просто отслеживать даже когда вы не знакомы с Ruby или Python. Все примеры кода на Ruby были проверены при помощи Ruby 2ю7, а все примеры на Python были проверены при помощи Python 2.7, причём в macOS. Однако, они, скорее всего, будут также работать и с последующими версиями.

Таблице 1-1

Таблица 0-1. Минимальные требования
Программные/ аппаратные средства Требования к ОС

Python 2.7

macOS

Ruby 2.7

Ubuntu

веб браузер

{Прим. пер.: Docker под Windows}

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

 Загрузка примеров кода

Вы можете загрузить файлы примеров кода по адресу из своей учётной записи: http://www.packtpub.com. Если вы приобрели книгу где- либо ещё, вы можете посетить http://www.packtpub.com/support и зарегистрироваться для получения этих файлов по электронной почте непосредственно на свой адрес.

Вы можете загрузить эти файлы с кодом выполнив следующие шаги:

  1. Зарегистрируйтесь на нашем вебсайте при помощи своего адреса электронной почты и пароля.

  2. Переместите указатель мыши на закладку SUPPORT в верхней части.

  3. Кликните по Code Downloads & Errata.

  4. Введите название книги в блок Search.

  5. Выберите книгу для которой вы ищете для загрузки файлы исходного кода.

  6. В ниспадающем меню выберите где вы приобрели эту книгу.

  7. Кликните по Code Download.

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

  1. WinRAR / 7-Zip для Windows

  2. Zipeg / iZip / UnRarX для Mac

  3. 7-Zip / PeaZip для Linux

Весь код в единой упаковке также размещён на GitHub. В случае обновления этого кода, он также будет обновлён и в обозначенном репозитории GitHub.

У нас также имеются и прочие упаковки кодов из нашего богатого каталога книг и видео- материалов , доступными в GitHub. Ознакомьтесь с ним!

 Загрузка цветных изображений этой книги

Мы дополнительно снабжаем вас файлом PDF, который содержит цветные изображения экранных снимков/ схем, использованных в данной книге. Цветные изображения помогут вам лучше понять изменения в выводе. Вы можете загрузить этот файл по адресу: https://static.packt-cdn.com/downloads/9781789131666_ColorImages.pdf.

 Соглашения

В данной книге вы найдёте ряд текстовых стилей, которые делают разницу между различными видами информации. Здесь мы приводим некоторые примеры этих стилей и объяснение их назначения.

CodeInText обозначает в тексте, имена таблиц базы данных, имена папок, имена файлов, расширения файлов, имена путей, модели URL-адресов, ввод пользователя, и регулировки Twitter. Вот некие примеры: "Как и следует из названия, ни пользователь cc-admin, ни пользователь cc-dev не обладают полномочиями выполнения чего бы то ни было в cc-dev-vhost.".

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


connection = Bunny.new ENV['RABBITMQ_URI']
# Start a session with RabbitMQ
connection.start
 	   

Всякая командная строка ввода или вывода отображается так:


sudo apt install curl gnupg -y
sudo apt install apt-transport-https
 	   

Жирным шрифтом отображаются новые термины или важные слова, которые вы видите на экране. Например, появляющиеся в тексте слова в меню или блоках диалогов. Вот некий пример: "Кликните по закладке Admin в своей консоли".

[Замечание]Замечание

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

[Совет]Совет

Советы и ловкие приёмы возникают таким образом.

 Разделы

В этой книге вы будете находить отдельные часто повторяющиеся заголовки (Приготовление, Как это сделать..., Как это работает..., Также ознакомьтесь... и Дополнительно). Чтобы получить чёткие инструкции как выполнить определённый рецепт, применяйте эти разделы следующим образом:

Приготовление

Этот раздел сообщит вам что ожидает данный раздел и описывает как настроить всё необходимое для данного рецепта и выполнить предварительные настройки.

Как это сделать...

Данный раздел содержит все шаги, которые следует осуществить в нём.

Как это работает...

Этот раздел обычно размещает подробное объяснение того что происходило в предыдущем разделе.

Также ознакомьтесь...

В этом разделе содержится дополнительная информация о данном рецепте чтобы вы получили больше сведений о самом рецепте.

Дополнительно

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

 Обратная связь с читателями

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

Для отправки обычного отклика просто пошлите электронное письмо на адрес feedback@packtpub.com с упоминанием заголовка книги в теме вашего сообщения.

Если у вас существует тема, в которой у вас имеется опыт и вы заинтересованы либо в написании, либо во вкладе в книгу, обратитесь к руководству по адресу www.packtpub.com/authors.

 Поддержка пользователей

Теперь, когда вы являетесь гордым владельцем книги Packt, у нас есть целый ряд моментов для помощи вам в получении максимальной выгоды от вашей покупки.

 Опечатки

Хотя мы и предприняли все меры чтобы обеспечить точность нашего содержимого, ошибки всё- таки возможны. Если вы обнаружили ошибку в нашей книге - возможно, ошибку в тексте или в коде - мы будем признательны если вы сообщите об этом нам. Сделав это, вы можете предостеречь остальных читателей от разочарования и помочь нам улучшить последующие версии данной книги. Если вы обнаружили ошибку, пожалуйста, сообщите о ней посетив www.packtpub.com/submit-errata, выбрав вашу книгу, кликнув на ссылку Errata Submission Form, и заполнив подробности найденной вами ошибки. Когда ваша ошибка будет проверена, вы получите уведомление и ошибка будет выложена на наш веб- сайт или добавлена в какой- нибудь перечень существующих ошибок с заголовком раздела Errata.

Для просмотра ранее выявленных ошибок посетите www.packtpub.com/books/content/support и введите название нужной книги в поле поиска. Необходимая информация появится в разделе Errata.

 Незаконное тиражирование

Пиратство, защищённых авторским правом материалов в Интернете является постоянной проблемой во всех средствах массовой информации. В Packt мы подходим к защите наших авторских прав и лицензий очень серьёзно. Если вы столкнётесь с какой-либо незаконной копией наших работ в любой форме в Интернете, пожалуйста, предоставьте нам сразу адрес местонахождения или имя веб-сайта, чтобы мы могли принять меры. {Прим. пер.: Согласно закону об авторском праве РФ, авторские права на перевод принадлежат авторам этого перевода. Данным переводом, по нашему мнению, мы служим популяризации основных стратегических направлений развития тем Packt. В случае наличия конструктивных предложений, готовы к тесному сотрудничеству.}

Пожалуйста, обратитесь по адресу copyright@packtpub.com со ссылкой на материалы содержащие признаки нарушения авторских прав.

Мы выражаем вам признательность в защите наших авторов и нашей возможности доносить до вас имеющего ценность содержимого.

 Вопросы

Если у вас есть проблемы по любым сторонам данной книги, вы можете контактировать с нами по адресу questions@packtpub.com и мы предпримем все меры в отношении ваших проблем.

 Содержание

Предисловие
Что охватывает эта книга
Что вам нужно для этой книги
Для кого эта книга
Соглашения
Обратная связь с читателями
Поддержка пользователей
Загрузка кодов примеров
Опечатки
Незаконное тиражирование
Вопросы
Глава 1. Как оживает Rabbit
Технические требования
Объяснение очередей сообщений
Вскрываем AMQP и RabbitMQ
Шаблон обмена сообщениями запрос- отклик
Шаблон обмена сообщений с очередями
Архитектура со слабыми связями
Встречайте AMQP
Брокер RabbitMQ
Применение RabbitMQ в реальной жизни
Очереди сообщений между микрослужбами
События и задачи
Выявляем все преимущества постановки сообщений в очереди
Сценарий RabbitMQ
Подготовка к RabbitMQ
Установка брокера
Установка RabbitMQ в Ubuntu
Установка RabbitMQ в Docker
Запуск RabbitMQ
Выгрузка примеров кода
Проверка того, что брокер RabbitMQ работает
Установка встраиваемого модуля управления (Web UI)
Настройка пользователей
Настройка выделенных vhosts
Выводы
>Глава 2. Создание приложения Такси
Технические требования
Стоящая за CC архитектура приложения
Установка устойчивого подключения к RabbitMQ
Работа с каналами
Построение инструментария запроса такси
Обмен напрямую
Отправка самого первого сообщения
Структура сообщения AMQP
Потребление сообщений
Подтверждение и отрицательное подтверждение
Запуск кода
Исполнение приложения
Добавление тематических сообщений
Выводы
Глава 3. Отправка сообщений множеству водителей такси
Технические требования
Работа с каналами и очередями
Определение счётчика предварительной выборки потребителя
Настройка верного значения предварительной выборки
Подтверждение сообщений
Публикация во всех очередях
Веерный обмен
Привязка к вееру
Запуск приложения
Выводы
Глава 4. Настройка доставки сообщений
Технические требования
Обработка мёртвых писем
Перестроение очередей
Осуществление сообщений
Задержанные сообщения RabbitMQ
Превращение доставки в обязательную
Обмен по умолчанию в RabbitMQ
Реализация отдела обработки отправителя
Обеспечение согласованности между образами Linux
Выводы
Глава 5. Маршрутизация сообщений
Технические требования
Отправка откликов соответствующему издателю
WebSockets в RabbitMQ
Разрешение подключаемого модуля Web STOMP
Поддержка безопасности Web STOMP через SSL
Создание и публикация GPS сведений в очередях
Подписка на GPS сведения драцвера через WebSockets
Очереди Reply-to и RPC
Создание службы анализа данных
Выводы
Глава 6. Привносим RabbitMQ в промышленное применение
Технические требования
Добавление узлов в наш кластер
Подключение к кластеру
Стратегии обработки разбиения на разделы
Изучение типов очередей RabbitMQ
Очереди с зеркалированием
Очереди кворума
Ленивые очереди
Применение федеративных брокеров и выработка журналов
Технология обработки журнала
Выводы
Глава 7. Рекомендации по наблюдению и брокер
Как избегать утраты сообщений
Применение обмена мёртвыми сообщениями
Обработка подтверждений и ратификаций
Рекомендации по обработке сообщений
Ограничение размера сообщений
Применение потребителей и предварительная выборка
Поддержка чистоты очередей и брокеров
Установка TTL для сообщений или значение максимальной длины в очередях
Автоматическое удаление неиспользованных сообщений
Рекомендации по маршрутизации
Разработка системы с маршрутизацией на уме
Сетевые среды поверх соединений и каналов
Применение TLS и AMQP для безопасновсти
Раздельное подключение
Расщепление очередей по различным ядрам
Черепичный RabbitMQ
Обмен согласованным хэшем
Изучение готовых решений
Отслеживание - построение в очереди REST API
Выводы
Указатель