RabbitMQ для профессионалов

Гайвин Рой

 

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

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

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

Опубликовано Manning Publications Co.

20 Baldwin Road

PO Box 761

Shelter Island, NY 11964

ISBN 978-1617291005

www.packtpub.com

2018-05-27

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

Издания на английском языке
Автор
Гайвин Рой
Редактор по аудитории
Карен Миллер
Технический редактор
Джеймс Титкамб
Редактор технического развития
Филип Уорнер
Редактор тескта
Алисон Бринер
Корректор
Картстен Шрёбак
Наборщик
Деннис Дайлинник
Изготовитель переплета
Мария Тюдор

 www.Manning.com

 Содержание

Вводная часть
Предисловие
Благодарности
Об этой книге
Часть 1. Архитектура RabbitMQ и приложения
Глава 1. Основы RabbitMQ
Функциональность и преимущества RabbitMQ
RabbitMQ и Erlang
RabbitMQ и AMQP
Кто применяет RabbitMQ и как?
Преимущества архитектур со слабыми связями
Отцепление ваших приложений
Отделение записи в базу данных
Бесшовное добавление новой функциональности
Репликация данных и событий
Федерализация данных и событий со множеством хозяев
Модель расширенных очередей обмена сообщениями
Выводы
Глава 2. Как разговаривает Rabbit: протокол AMQ
AMQP в качестве транспорта RPC
Начало общения
Настройка на правильный канал
Структура кадра RPC AMQP
Составляющие кадра AMQP
Типы кадров
Маршалинг сообщений в кадры
Анатомия метода кадра
Содержимое заголовка кадра
Тело кадра
Размещение протокола для применения
Описание обмена
Описание очереди
Связывание очереди с обменом
Публикация сообщения в RabbitMQ
Потребление сообщений из RabbitMQ
Создание издателя сообщений при помощи Python
Получение сообщений из RabbitMQ
Выводы
Глава 3. Экскурс вглубь свойств сообщения
Надлежащее использование свойств
Создание контракта явного сообщения с content-type
Уменьшение размера сообщения при помощи gzip и content-encoding
Ссылочные сообщения с применением message-id и correlation-id
Message-id
Correlation-id
Установка даты порождения: свойство timestamp
Автоматическое истечение срока сообщения
Балансировка скорости и безопасности с помощью delivery-mode
Удостоверение происхождения сообщения через app-id и user-id
app-id
user-id
Определение особенностей сообщения свойством типа сообщения
Применение reply-to для динамических рабочих потоков
Индивидуализация свойств при помощи атрибутов заголовка
Приоритеты атрибутов
Атрибуты, которые вы не можете использовать: cluster-id/reserved
Выводы
Глава 4. Компромиссы с производительностью при публикации
Балансировка между скоростью доставки и гарантией доставки
Чего ожидать при отсутствии гарантии
RabbitMQ не будет принимать немаршрутизируемые сообщения с обязательной установкой
Подтверждение издателю как альтернатива с малым весом транзакциям
Использование Альтернативного обмена для не выполнивших маршрут сообщений
Пакетная обработка с транзакциями
Обслуживание отказов узла с помощью очередей HA
Очереди HA с транзакциями
Оставление сообщений на диск посредством delivery-mode
Когда RabbitMQ выталкивается обратно
Проверка сообщения при помощи rabbitpy
Использование API управления для состояния соединения
Выводы
Глава 5. Не получайте сообщения, потребляйте их
Сопоставление Basic.Get и Basic.Consume
Basic.Get
Basic.Consume
Регулировки производительности потребителей
Применение режима no-ack для быстрей пропускной способности
Контроль потребления упреждающей выборки посредством установок качества обслуживания
Использование транзакций потребителями
Отклонение сообщений
Basic.Reject
Basic.Nack
Обмен пропавшими письмами
Контроль очередей
Временные очереди
Постоянные очереди
Произвольные установки очереди
Выводы
Глава 6. Шаблоны сообщений через маршрутизацию сообщений
Простая маршрутизация сообщений при помощи прямого обмена
Создание архитектуры приложения
Создание исполнителя RPC
Разработка простого издателя RPC
Широковещательные сообщения через веерный обмен
Изменение потребителя распознавания лиц
Создание простого потребителя хэширования изображений
Выборочная маршрутизация сообщений при помощи предметного обмена
Выборочная маршрутизация сообщений при помощи обмена заголовками
Эталонное тестирование производительности обмена
Мета переход: маршрутизация обмена- к- обмену
Маршрутизация сообщений посредством обмена с согласованным хэшированием
Выводы
Часть 2. Управление RabbitMQ в Центре обработки данных или в облачном решении
Глава 7. Масштабирование RabbitMQ в кластерах
Про кластеры
Кластеры и UI управления
Типы узлов кластера
Кластеры и поведение очереди
Установка кластера
Установка виртуальной машины
Добавление узлов в имеющийся кластер
Выводы
Глава 8. Распространение межкластерных сообщений
Федерализация обмена и очереди
Федеративный обмен
Федеративные очереди
Создание виртуальной машины RabbitMQ
Создание первого экземпляра
Дублирование экземпляра EC2
Подключение к восходящему потоку
Определение восходящей федерализации
Определение политики
Применение восходящих наборов
Федеративные обмены в двух направлениях
Федерализация для обновлений кластера
Выводы
Часть 3. Интеграция и персонализация
Глава 9. Использование альтернативных протоколов
MQTT и RabbitMQ
Протокол MQTT
Публикация через MQTT
Подписчики MQTT
Настройка подключаемого модуля MQTT
STOMP и RabbitMQ
Протокол STOMP
Публикация сообщений
Потребление сообщений
Настройка подключаемого модуля STOMP
Использование STOMP в веб браузере
Публикация без сохранения состояния через HTTP
Каак появился statelessd
Использование statelessd
Операционная архитектура
Публикация сообщений посредством statelessd
Выводы
Глава 10. Интеграция с базами данных
Расширение PostgreSQL pg_amqp
Установка расширения pg_amqp
Настройка расширения pg_amqp
Публикация сообщений через расширения pg_amqp
Ожидание уведомлений PostgreSQL
Установка обмена LISTEN PostgreSQL
Настройка на основе политик
Создание обмена
Создание и привязка проверочной очереди
Публикация через NOTIFY
Сохранения сообщений в InfluxDB
Установка и настройка InfluxDB
Установка обмена хранилища InfluxDB
Создание проверочного обмена
Проверка обмена
Выводы
Дополнение A. Приступая к установке
Указатель

 Предисловие

Когда Manning Publications издала RabbitMQ in Action в апреле 2012, RabbitMQ быстро набрал популярность. На сегодняшний день он является одним из выдающихся лидеров в мире брокеров сообщений и идеально подходит для различных применений. Содействие коммуникации через распределённые приложения, использование микросервисов в сервис- ориентированной архитектуры, а также обеспечение логического разделения компонентов CQRS и Event Sourcing - это лишь некоторые из широких применений RabbitMQ.

Теперь мы представляем новое, углубленное исследование самого RabbitMQ, углубляющегося далеко под его покровы, исследуя такие вещи, как структурирование расширенного протокола сообщения (AMQ), последовательное исследование различных обменов, а также рассмотрение различных сторон производительности. RabbitMQ in Depth нацелен на то, чтобы перевести ваше понимание RabbitMQ на новый уровень и позволить вам в дальнейшем применять эти знания в реальных приложениях сегодняшнего дня.

 Благодарности

Эта книга отняла какие- то время на своё создание и, прежде всего, огромное спасибо всем нашим семьям и друзьям, которые неустанно стояли у всех нас за спиной, мирились с нами и заставляли этому позднем вечернему кофе поддержать нас в продвижении через длительные часы работы, необходимых для написания этой книги - спасибо!

Альваро Вайдела и Джейсону Дж. У. Уильямсу, авторам RabbitMQ in Action (также опубликованной Manning Publications, в апреле 2012 года), за основу для понимания и интереса бесчисленных разработчиков к самому RabbitMQ.

Карен, нашему редактору по разработке, за её бесконечное терпение и понимание нас на протяжении всего этого периода, а также всей команде Manning за приложенное всеми фантастическое усилие чтобы наконец довести нас до момента издания. Это была тяжёлая работа, и мы преодолели довольно много раундов, но мы благодарны за солидные производственные усилия, которые привели к результату!

Спасибо также большое техническому корректору Картену Штрёбаку, чей вклад очень помог книге, так же как и отзывы рецензентов: Филлипа Уорнера, Джерри Куча, Нади Саад Нори, Брюса Снайдера, Роберта Килти, Милоса Миливоевича, Арати Маддулы, Яна Далласа, Джорджа Харли, Димитрия Авалиотиса, Хехена Гао, Стефана Туральски, Эндрю Мередит, Артёма Дейнеко, Дэвида Паккуда, Барри Александера, Биджу Кунджуммена, Адольфо Переса Альвареа, Брэндона Вилхита, Дэвида Палл и Рэй Луго.

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

 Об этой книге

RabbitMQ является брокером сообщений с открытым исходным кодом, написанном на Trlang, который в настоящее время находится под крылом Pivotal Software. Он основывается на открытом протоколе AMPQ с официальными библиотеками клиентов на Java, .NET, Erlang,, помимо библиотек прочих популярных языков программирования.

Данная книга соотносится с RabbitMQ 3.6.3, поэтому при нечётком расписании выпусков самого RabbitMQ, к тому моменту, когда эта книга достигнет вас, могут появиться и более новые версии. Не беспокойтесь, так как по нашему опыту RabbitMQ редко разрушал свойства новыми выпусками, взамен лишь добавляя новыую функциональность и внося исправления в проблемные места!

Все используемые в книге примеры кода написаны на Python, но если у вас нет рабочей настройки Python и RabbitMQ, или вы просто пожелаете экспериментировать не настраивая всю среду, мы включили инструкции по настройке блоков Vagrant со всей предварительной настройкой. Обязательно ознакомьтесь с Дополнением A. Приступая к установке для получения инструкций о том, как его установить и запустить.

Дорожная карта

Глава 1. Основы RabbitMQ рассматривает основы RabbitMQ: различные свойства самого RabbitMQ, а также основу RabbitMQ, модель Advanced Messaging Queuing.

Глава 2. Как разговаривает Rabbit: протокол AMQ раскрывает протокол AMQ, рассматривая структуру его кадра, а также процессы низкого уровня, которые происходят при публикации сообщений или их выборке из RabbitMQ.

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

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

Глава 5. Не получайте сообщения, потребляйте их поясняет концепцию потребления сообщений, рассматривая фундаментальную разницу между Basic.Get и Basic.Consume на нижнем уровне (и то, почему последнее имеет преимущества), а также упреждающую выборку и качество обслуживания, подтвеждения получения сообщений, временные очереди и время истечения действия сообщения.

Глава 6. Шаблоны сообщений через маршрутизацию сообщений рассматривает вглубь четыре центральных типа обмена в RabbitMQ и то какие преимущества они способны предоставить вашему приложению.

Глава 7. Масштабирование RabbitMQ в кластерах обсуждает как вы можете масштабировать вверх RabbitMQ управляя кластерами, восстановление после краха в кластере, и последующие обсуждения относительно производительности при работе в среде кластера.

Глава 8. Распространение межкластерных сообщений строит основные понятия ядра построения кластеров рассматривая федеративный обмен и очереди, интеграцию кластеров RabbitMQ с RabbitMQ, а также применение политик.

Глава 9. Использование альтернативных протоколов рассматривает прочие способы общения с RabbitMQ: используя MQTT и STOMP в качестве альтернативных протоколов, либо применяя обмен сообщениями HTTP без сохранения состояний.

Наконец, Глава 10. Интеграция с базами данных рассматривает интеграцию баз данных как с PostgreSQL, так и с InfluxDB для последующих интересных объединений.

Код

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

Форум книги

приобретение RabbitMQ in Depth также включает и бесплатный доступ к частному веб форуму, запущенному Manning Publications, в котором вы можете делать комментарии относительно этой книги, задавть технические вопросы, а также получать помощь ль самого автора и прочих пользователей. Для доступа к этому форуму,пеерейдите на https://forums.manning.com/forums/rabbitmq-in-depth. Вы также можете получить дополнительную информацию о форумах Manning и правилах поведения на https://forums.manning.com/forums/about.

Обязательства Manning перед нашими читателем состоят в том, чтобы предоставить место, в котором может состояться полноценный диалог между персональными читателями и самим автором. Это не обязательство какого-либо конкретного участия со стороны автора, вклад которого в форум остаётся добровольным (и неоплаченным). Мы предлагаем вам попробовать задать автору несколько сложных вопросов, чтобы не потерять его интереса! Форум и архивы предыдущих обсуждений будут доступны с веб-сайта издателя до тех пор, пока книга находится в печати.

Об авторе

Гайвин Рой является активным миссионером открытого исходного кода и его адвокатом, который работает с технологиями интернета и корпоративного уровня начиная с середины 90-х.

Об обложке

Рисунок на обложке RabbitMQ in Depth озаглавлен «Человек из Микановаца, Шриджем, Хорватия». Иллюстрация взята из репродукции альбома хорватских традиционных костюмов из середины девятнадцатого века Николы Арсеновича, опубликованного этнографическим Музеем в Сплите, Хорватия, в 2003 году. Иллюстрации были получены от полезной библиотеки в Этнографическом музее в Сплите, который расположен в римском ядре средневекового центра города: руины дворца ставки императора Диоклетиана примерно 304 года нашей эры. Книга включает в себя слегка раскрашенные иллюстрации фигур из разных регионов Хорватии, сопровождаемые описаниями костюмов и повседневной жизни.

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