В последней статье мы переходим к поддержке обмена сообщениями AWS.
1. Поддержка обмена сообщениями AWS
1.1. SQS (Простая служба очереди)
Мы можем отправлять сообщения в очередь SQS, используя QueueMessagingTemplate
.
В этом руководстве мы рассмотрим концепцию разветвления
и обмена темами с помощью Spring AMQP и RabbitMQ .
На высоком уровне разветвленные обмены будут транслировать одно и то же сообщение во все связанные очереди , в то время как тематические обмены используют ключ маршрутизации для передачи сообщений в определенную связанную очередь или очереди .
Для этого руководства рекомендуется предварительно прочитать Messaging With Spring AMQP .
В этом руководстве мы рассмотрим, как Kafka обеспечивает однократную доставку между приложениями-производителями и приложениями-потребителями с помощью недавно представленного API транзакций.
Кроме того, мы будем использовать этот API для реализации транзакционных производителей и потребителей для достижения сквозной однократной доставки в примере WordCount.
Из-за различных сбоев системы обмена сообщениями не могут гарантировать доставку сообщений между приложениями производителя и потребителя. В зависимости от того, как клиентские приложения взаимодействуют с такими системами, возможна следующая семантика сообщений:
Чтобы лучше понять, как работает RabbitMQ, нам нужно погрузиться в его основные компоненты.
В этой статье мы рассмотрим обмены, очереди и привязки, а также то, как мы можем объявить их программно в приложении Java.
Как обычно, мы будем использовать клиент Java и официальный клиент для сервера RabbitMQ.
Apache Kafka — это распределенная и отказоустойчивая система обработки потоков.
В этом руководстве мы рассмотрим поддержку Spring для Kafka и уровень абстракции, который он обеспечивает по сравнению с собственными клиентскими API Kafka Java.
Spring Kafka предлагает простую и типичную модель программирования шаблонов Spring с KafkaTemplate
и управляемыми сообщениями POJO через аннотацию @KafkaListener
.
Асинхронный обмен сообщениями — это тип слабосвязанной распределенной связи, который становится все более популярным для реализации архитектур, управляемых событиями . К счастью, Spring Framework предоставляет проект Spring AMQP , позволяющий нам создавать решения для обмена сообщениями на основе AMQP.
С другой стороны, работа с ошибками в таких средах может оказаться нетривиальной задачей . Итак, в этом уроке мы рассмотрим различные стратегии обработки ошибок.
В этом руководстве мы будем использовать RabbitMQ , реализующий стандарт AMQP. Кроме того, Spring AMQP предоставляет модуль spring-rabbit
, который делает интеграцию действительно простой.
Apache Pulsar — это распределенная система обмена сообщениями с открытым исходным кодом, основанная на публикации/подписке, разработанная в Yahoo .
Он был создан для поддержки критически важных приложений Yahoo, таких как Yahoo Mail, Yahoo Finance, Yahoo Sports и т. д. Затем, в 2016 году, он был открыт в рамках Apache Software Foundation.
Pulsar — это многопользовательское высокопроизводительное решение для обмена сообщениями между серверами . Он состоит из набора брокеров и букмекеров, а также встроенного Apache ZooKeeper
для настройки и управления. Букмекеры от Apache BookKeeper
, которые обеспечивают хранение сообщений до тех пор, пока они не будут использованы.
Разделение компонентов программного обеспечения является одной из наиболее важных частей проектирования программного обеспечения. Одним из способов достижения этого является использование систем обмена сообщениями, которые обеспечивают асинхронный способ связи между компонентами (сервисами). В этой статье мы рассмотрим одну из таких систем: RabbitMQ.
RabbitMQ — это брокер сообщений, который реализует протокол расширенной очереди сообщений ( AMQP ). Он предоставляет клиентские библиотеки для основных языков программирования.
Помимо использования для развязки программных компонентов RabbitMQ может использоваться для:
В этом руководстве мы рассмотрим обмен сообщениями через AMQP с использованием платформы Spring AMQP. Сначала мы рассмотрим некоторые ключевые концепции обмена сообщениями. Затем мы перейдем к практическому примеру.
Обмен сообщениями — это метод обмена данными между приложениями. Он основан на асинхронной передаче сообщений вместо архитектуры, основанной на синхронном запросе и ответе. Производители и потребители сообщений разделены промежуточным уровнем обмена сообщениями, известным как брокер сообщений . Брокер сообщений предоставляет такие функции, как постоянное хранение сообщений, фильтрация сообщений и преобразование сообщений.
В случае обмена сообщениями между приложениями, написанными на Java, обычно используется API JMS (Java Message Service). Для обеспечения взаимодействия между различными поставщиками и платформами мы не сможем использовать клиенты и брокеры JMS. Вот где AMQP пригодится .
В этом руководстве мы создадим производителя и потребителя сообщений, используя Spring Boot и Apache RocketMQ, платформу распределенного обмена сообщениями и потоковой передачи данных с открытым исходным кодом.
Для проектов Maven нам нужно добавить зависимость RocketMQ Spring Boot Starter :
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>