Выбрать главу

spring.artemis.user - user использующийся для доступа к broker (опционально)

spring.artemis.password - password использующийся для доступа к broker (опционально)

Например, рассмотрим следующую запись файла application.yml, который может использоваться в параметрах, не относящихся к режиму разработке:

spring:

    artemis:

        host: artemis.tacocloud.com

        port: 61617

        user: tacoweb

        password: l3tm31n

Это настраивает Spring для создания подключений к брокеру Artemis, который прослушивает artemis.tacocloud.com, порт 61617. Он также устанавливает учетные данные для приложения, которое будет взаимодействовать с этим брокером. Учетные данные не являются обязательными, но они рекомендуются для рабочих развертываний.

Если бы вы использовали ActiveMQ вместо Artemis, вам нужно было бы использовать специфичные для ActiveMQ свойства, перечисленные в таблице 8.2.

Таблица 8.2 Свойства для настройки расположения и учетных данных брокера ActiveMQ

Свойство - Описание

spring.activemq.broker-url - URL broker-а

spring.activemq.user - user использующийся для доступа к broker (опционально)

spring.activemq.password - password использующийся для доступа к broker (опционально)

spring.activemq.in-memory -  Стоит ли запускать брокер в памяти (по умолчанию: true)

Обратите внимание, что вместо того, чтобы предлагать отдельные свойства для имени хоста и порта брокера (посредника), адрес брокера ActiveMQ указывается с помощью одного свойства, spring.activemq.broker-url. URL должен быть tcp://URL , как показано в следующем фрагменте YAML:

spring:

    activemq:

        broker-urclass="underline" tcp://activemq.tacocloud.com

        user: tacoweb

        password: l3tm31n

Независимо от того, выбираете ли вы Artemis или ActiveMQ, вам не нужно настраивать эти свойства для разработки, когда брокер работает локально.

Если вы используете ActiveMQ, вам, однако, необходимо установить для свойства spring.activemq.in-memory значение false, чтобы Spring не запускал брокер в памяти. Брокер в памяти может показаться полезным, но он полезен только тогда, когда вы будете использовать сообщения из того же приложения, которое их публикует (что имеет ограниченную полезность).

Вместо использования встроенного брокера вы должны установить и запустить брокера Artemis (или ActiveMQ), прежде чем двигаться дальше. Вместо того, чтобы повторять инструкции по установке здесь, я отсылаю вас к документации брокера:

Artemis—https://activemq.apache.org/artemis/docs/latest/using-server.html

ActiveMQ—http://activemq.apache.org/getting-started.html#GettingStarted-Pre-InstallationRequirements

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

8.1.2 Отправка сообщений с помощью JmsTemplate

С JMS starter зависимостью (Artemis или ActiveMQ) в вашей сборке Spring Boot автоматически настроит JmsTemplate (среди прочего), который вы можете внедрить и использовать для отправки и получения 

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

JmsTemplate имеет несколько методов, которые полезны для отправки сообщений, включая следующие:

// Отправка сырых (raw) сообщений

void send(MessageCreator messageCreator) throws JmsException;

void send(Destination destination, MessageCreator messageCreator) throws JmsException;

void send(String destinationName, MessageCreator messageCreator) throws JmsException;

// Отправка сообщений сконвертированных из объектов

void convertAndSend(Object message) throws JmsException;

void convertAndSend(Destination destination, Object message) throws JmsException;

void convertAndSend(String destinationName, Object message) throws JmsException;

// Отправка сообщений, преобразованных из объектов с post-обработкойvoid convertAndSend(Object message,

MessagePostProcessor postProcessor) throws JmsException;

void convertAndSend(Destination destination, Object message,

MessagePostProcessor postProcessor) throws JmsException;

void convertAndSend(String destinationName, Object message,

MessagePostProcessor postProcessor) throws JmsException;

Как видите, на самом деле есть только два метода, send() и convertAndSend(), каждый из которых переопределен для поддержки различных параметров. И если вы посмотрите поближе, вы заметите, что различные формы convertAndSend() можно разбить на две подкатегории. Чтобы понять, что делают все эти методы, рассмотрим следующий список: