Сообщения с весенним АМЗП
1. Обзор
В этом учебнике мы изумим коммуникацию на основе сообщений по АМЗП с помощью рамки Весеннего АМЗП. Во-первых, мы охватим некоторые ключевые концепции обмена сообщениями. Затем перейдем к практическому примеру.
2. Сообщение на основе сообщений
Обмен сообщениями является методом общения между приложениями. Он опирается на асинхронную передачу сообщений вместо синхронной архитектуры, основанной на ответах на запрос. Производители и потребители сообщений разъединяются промежуточным слоем обмена сообщениями, известным как брокер сообщений . Брокер сообщений предоставляет такие функции, как постоянное хранение сообщений, фильтрация сообщений и преобразование сообщений.
В случае обмена сообщениями между приложениями, написанными на Java, обычно используется API JMS (Java Message Service). Для совместимости между различными поставщиками и платформами, мы не сможем использовать JMS клиентов и брокеров. Именно здесь пригодится АМЗП .
3. АМЗП – Расширенный протокол очереди сообщений
АМЗП является открытой стандартной спецификацией проводов для асинхронной связи с сообщением. В нем приводится описание того, как должно быть построено сообщение.
3.1. Чем Amqp отличается от Jms
Поскольку АМЗП является нейтральным для платформы стандартом двоичного протокола, библиотеки могут быть написаны на разных языках программирования и работать в различных средах.
Существует нет поставщика на основе протокола блокировки, как это имеет место при переходе от одного брокера JMS к другому. Для получения более подробной информации обратитесь к JMS vs АМЗП и Понимание АМЗП . Некоторые из широко используемых брокеров АМЗП являются RabbitM’ , OpenAM и StormM.
3.2. Образования АМЗП
Короче говоря, АМЗП состоит из бирж, очередей и привязки:
Обмены как почтовые отделения или почтовые ящики, и клиенты публикуют сообщение на биржу АМЗП. Существует четыре встроенных типа обмена
- Direct Exchange – Маршруты сообщений в очередь, сопоставляя полный ключ маршрутизации
- Fanout Exchange – Маршруты сообщений для всех очередей, связанных с ним
- Обмен темами – Маршруты сообщений в несколько очередей путем сопоставления ключа маршрутизации с шаблоном
- Обмен головами – Маршруты сообщений на основе заготовок сообщений
- Очереди привязаны к обмену с помощью ключа маршрутизации
- Сообщения отправляются на обмен с ключом маршрутизации. Затем обмен распространяет копии сообщений в очередях
Для получения более подробной информации, взгляните на Концепции АМЗП и Маршрутизация топологий.
3.3. Весенний АМЗП
Весенний АМЗП состоит из двух модулей: весна-amqp и весенне-кроличьи . Вместе эти модули обеспечивают абстракции для:
- Сущности АМЗП – мы создаем сущности с Сообщения, очередь, связывание и обмен Классы
- Управление подключением – мы подключаемся к нашему брокеру RabbitM, используя КэшингКоннектория
- Публикация сообщений – мы используем КроликТемплет для отправки сообщений
- Потребление сообщений – мы используем @RabbitListener читать сообщения из очереди
4. Настройка Rabbitmq Брокер
Нам нужен брокер RabbitM, доступный для нас, чтобы подключиться к. Самый простой способ сделать это, используя Docker, чтобы принести и запустить изображение RabbitM для нас:
docker run -d -p 5672:5672 -p 15672:15672 --name my-rabbit rabbitmq:3-management
Мы разоблачаем порт 5672, чтобы наше приложение можно было подключить к RabbitM.
И, мы подвергаем порт 15672 так, что мы можем увидеть чего наш брокер RabbitM’ делает через или пользовательский интерфейс управления: http://localhost:15672 или HTTP API: http://localhost:15672/api/index.html .
5. Создание нашего весеннего приложения Amqp
Итак, теперь давайте создадим наше приложение, чтобы отправить и получить простое сообщение “Здравствуйте, мир!” с помощью весеннего АМЗП.
5.1. Зависимость от Maven
Для того, чтобы добавить весна-amqp и весенне-кроличьи модули для нашего проекта, мы добавляем весна-загрузка-стартер-amqp зависимость от нашей пом.xml :
org.springframework.boot spring-boot-starter-amqp 2.2.2.RELEASE
Мы можем найти последнюю версию в Мавен Центральный .
5.2. Подключение к нашему Rabbitmq Брокер
Мы будем использовать автоматическую конфигурацию Spring Boot для создания наших ConnectionFactory , КроликТемплет , и КроликАдмин фасоль . В результате, мы получаем подключение к нашему брокеру RabbitM’ в порту 5672, используя имя пользователя по умолчанию и пароль “гость”. Таким образом, мы просто аннотировать наше приложение с @SpringBootApplication :
@SpringBootApplication public class HelloWorldMessageApp { // ... }
5.3. Создайте нашу очередь
Для того, чтобы создать нашу очередь, мы просто определяем фасоль типа Очередь . КроликАдмин найдет это и свяжет его с обменом по умолчанию с ключом маршрутизации “myueue”:
@Bean public Queue myQueue() { return new Queue("myQueue", false); }
Мы устанавливаем очередь, чтобы быть не долговечной, так что очередь и любые сообщения на нем будут удалены, когда RabbitM’ остановлен. Обратите внимание, однако, что перезапуск нашего приложения не повесят на очередь.
5.4. Отправить наше сообщение
Давайте использовать КроликТемплет для отправки наше сообщение “Здравствуйте, мир!”:
rabbitTemplate.convertAndSend("myQueue", "Hello, world!");
5.5. Потребляйте наше сообщение
Мы будем реализовывать сообщение потребителя, аннотируя метод с @RabbitListener :
@RabbitListener(queues = "myQueue") public void listen(String in) { System.out.println("Message read from myQueue : " + in); }
6. Запуск нашего приложения
Во-первых, мы начинаем Брокера RabbitM:
docker run -d -p 5672:5672 -p 15672:15672 --name my-rabbit rabbitmq:3-management
Затем мы запускаем приложение для загрузки пружины, запуская HelloWorldMessage.java , выполнение основной () метод:
mvn spring-boot:run -Dstart-class=com.baeldung.springamqp.simple.HelloWorldMessageApp
Пока приложение работает, мы увидим, что:
- Приложение отправляет сообщение на обмен по умолчанию с “myueue” в качестве ключа маршрутизации
- Затем очередь “моя” получает сообщение
- Наконец, слушать метод потребляет сообщение от “myueue” и печатает его на консоли
Мы также можем использовать страницу управления RabbitM’ в http://localhost:15672 чтобы увидеть, что наше сообщение было отправлено и потребляется.
7. Заключение
В этом учебнике мы рассмотрели архитектуру на основе обмена сообщениями по протоколу АМЗП, используя Весенний АМЗП для связи между приложениями.
Полный исходный код и все фрагменты кода для этого учебника доступны на проект GitHub .