Использование Служебная шина Azure в приложениях Spring
В этой статье показано, как использовать Служебная шина Azure в приложениях Java, созданных с помощью Spring Framework.
Azure предоставляет асинхронную платформу обмена сообщениями с именем Служебная шина Azure (служебная шина), которая основана на стандарте Расширенного протокола очереди сообщений 1.0 (AMQP 1.0). Вы можете использовать служебная шина в диапазоне поддерживаемых платформ Azure.
Spring Cloud Azure предоставляет различные модули для отправки сообщений и получения сообщений из очередей служебная шина и подписок тем/с помощью платформ Spring.
Для разных вариантов использования можно использовать следующие модули независимо или объединить их.
Spring Cloud Служебная шина Azure Starter позволяет отправлять и получать сообщения с клиентской библиотекой пакета SDK для Java служебная шина с функциями Spring Boot.
Spring Cloud Служебная шина Azure JMS Starter позволяет использовать API JMS для отправки и получения сообщений с служебная шина очередями и подписками.
Spring Messaging Служебная шина Azure позволяет взаимодействовать с служебная шина через API Spring Messaging.
Spring Integration Служебная шина Azure позволяет подключать каналы сообщений Spring Integration с служебная шина.
Spring Cloud Stream Binder для служебная шина позволяет использовать служебная шина в качестве по промежуточного слоя обмена сообщениями в приложениях Spring Cloud Stream.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Пакет средств разработки Java (JDK) версии 8 или более поздней.
- Apache Maven версии 3.0 или более поздней.
- Служебная шина Azure и очередь или раздел или подписка. Если у вас его нет, создайте очередь или раздел служебная шина. Дополнительные сведения см. в статье "Использование портал Azure для создания пространства имен служебная шина и очереди" или "Использование портал Azure" для создания раздела и подписок служебная шина в этом разделе.
- Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Проект Maven и в разделе "Зависимости" добавьте зависимость Spring Web , а затем выберите Java версии 8 или более поздней.
Примечание.
Чтобы предоставить учетной записи доступ к ресурсам служебная шина, в созданном пространстве имен Служебная шина Azure назначьте роли Служебная шина Azure отправителя данных и Служебная шина Azure получателю данных учетной записи Майкрософт, которую вы сейчас используете. использование. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
Внимание
Для выполнения действий, описанных в этом руководстве, требуется Spring Boot версии 2.5 или более поздней.
Подготовка локальной среды
В этом руководстве конфигурации и код не имеют никаких операций проверки подлинности. Однако для подключения к службе Azure требуется проверка подлинности. Чтобы завершить проверку подлинности, необходимо использовать клиентская библиотека удостоверений Azure. Spring Cloud Azure использует DefaultAzureCredential
библиотеку удостоверений Azure, чтобы получить учетные данные без каких-либо изменений кода.
DefaultAzureCredential
поддерживает несколько методов проверки подлинности и определяет, какой метод следует использовать во время выполнения. Этот подход позволяет приложению использовать различные методы проверки подлинности в разных средах, таких как локальные или рабочие среды, без реализации кода для конкретной среды. Дополнительные сведения см. в разделе DefaultAzureCredential для приложений Java, размещенных в Azure.
Чтобы использовать Azure CLI, IntelliJ или другие методы для выполнения проверки подлинности в локальных средах разработки, ознакомьтесь с проверкой подлинности Azure в средах разработки Java. Чтобы завершить проверку подлинности в средах размещения Azure, рекомендуется использовать управляемое удостоверение. См. сведения об управляемых удостоверениях для ресурсов Azure.
Примечание.
Служебная шина Azure для API JMS в настоящее время не поддерживаетсяDefaultAzureCredential
. Если вы используете Spring JMS с служебная шина, пропустите этот шаг.
Использование начального Служебная шина Azure Spring Cloud
Модуль Spring Cloud Служебная шина Azure Starter импортирует клиентская библиотека Java служебная шина платформой Spring Boot. Вы можете использовать Spring Cloud Azure и пакет AZURE SDK вместе в неисключаемом шаблоне. Таким образом, вы можете продолжать использовать api клиента Java служебная шина в приложении Spring.
Добавление зависимости служебная шина
Чтобы установить модуль Starter Служебная шина Azure Spring Cloud, добавьте в файл pom.xml следующие зависимости:
Выставление счетов за материалы Spring Cloud (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт Spring Cloud Служебная шина Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
В этом руководстве описано, как использовать служебная шина клиентов Java в контексте приложения Spring. Здесь мы представляем две альтернативы. Рекомендуется использовать автоматическую настройку Spring Boot и использовать встроенные клиенты из контекста Spring. Альтернативным способом является создание клиентов на собственных программном основе.
Первый способ, который включает автоматическое подключение клиентских бобов из контейнера Spring IoC, имеет следующие преимущества при сравнении со вторым способом. Эти преимущества обеспечивают более гибкий и эффективный интерфейс при разработке с помощью клиентов служебная шина.
Вы можете использовать внешнюю конфигурацию , чтобы работать с одинаковым кодом приложения в разных средах.
Вы можете делегировать процесс обучения шаблона построителя и регистрации этого клиента в контексте приложения в платформу Spring Boot. Это делегирование позволяет сосредоточиться на использовании клиентов с собственными бизнес-требованиями.
С помощью индикатора работоспособности можно легко проверить состояние и работоспособность приложения и внутренних компонентов.
В следующем примере кода показано, как использовать и ServiceBusProcessorClient
использовать ServiceBusSenderClient
эти два варианта.
Примечание.
Пакет SDK для Java Azure для служебная шина предоставляет несколько клиентов для взаимодействия с служебная шина. Начальный элемент также предоставляет автоматическую настройку для всех служебная шина клиентов и построитель клиентов. Здесь мы используем только ServiceBusSenderClient
примеры.ServiceBusProcessorClient
Использование автоматической настройки Spring Boot
Чтобы отправлять сообщения в служебная шина и получать сообщения, настройте приложение, выполнив следующие действия.
Настройте пространство имен и очередь служебная шина, как показано в следующем примере:
spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name> spring.cloud.azure.servicebus.entity-name=<your-servicebus-queue-name> spring.cloud.azure.servicebus.entity-type=queue
Совет
Здесь мы используем очередь служебная шина в качестве примера. Чтобы использовать раздел или подписку, необходимо добавить
spring.cloud.azure.servicebus.processor.subscription-name
свойство и изменитьentity-type
значениеtopic
на .Создайте класс
ServiceBusProcessorClientConfiguration
Java, как показано в следующем примере. Этот класс используется для регистрации обработчикаServiceBusProcessorClient
сообщений и ошибок.@Configuration(proxyBeanMethods = false) public class ServiceBusProcessorClientConfiguration { @Bean ServiceBusRecordMessageListener processMessage() { return context -> { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); }; } @Bean ServiceBusErrorHandler processError() { return context -> { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); }; } }
ServiceBusSenderClient
Вставьте приложение Spring и вызовите связанные API для отправки сообщений, как показано в следующем примере:@SpringBootApplication public class ServiceBusQueueApplication implements CommandLineRunner { private final ServiceBusSenderClient senderClient; public ServiceBusQueueApplication(ServiceBusSenderClient senderClient) { this.senderClient = senderClient; } public static void main(String[] args) { SpringApplication.run(ServiceBusQueueApplication.class, args); } @Override public void run(String... args) throws Exception { // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.printf("Sent a message to the queue"); senderClient.close(); // wait the processor client to consume messages TimeUnit.SECONDS.sleep(10); } }
Примечание.
По умолчанию жизненный цикл автопроводника
ServiceBusProcessorClient
управляется контекстом Spring. Обработчик автоматически запускается при запуске контекста приложения Spring и останавливается при остановке контекста приложения Spring. Чтобы отключить эту функцию, настройтеspring.cloud.azure.servicebus.processor.auto-startup=false
.Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sent a message to the queue Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World!
Создание клиентов служебная шина программным способом
Вы можете создать эти клиентские бобы самостоятельно, но процесс является сложным. В приложениях Spring Boot необходимо управлять свойствами, изучать шаблон построителя и регистрировать клиент в контексте приложения Spring. В следующем примере кода показано, как это сделать:
Создайте класс
ServiceBusClientConfiguration
Java, как показано в следующем примере. Этот класс используется для объявленияServiceBusSenderClient
иServiceBusProcessorClient
бобов.@Configuration(proxyBeanMethods = false) public class ServiceBusClientConfiguration { private static final String SERVICE_BUS_FQDN = "<service-bus-fully-qualified-namespace>"; private static final String QUEUE_NAME = "<service-bus-queue-name>"; @Bean ServiceBusClientBuilder serviceBusClientBuilder() { return new ServiceBusClientBuilder() .fullyQualifiedNamespace(SERVICE_BUS_FQDN) .credential(new DefaultAzureCredentialBuilder().build()); } @Bean ServiceBusSenderClient serviceBusSenderClient(ServiceBusClientBuilder builder) { return builder .sender() .queueName(QUEUE_NAME) .buildClient(); } @Bean ServiceBusProcessorClient serviceBusProcessorClient(ServiceBusClientBuilder builder) { return builder.processor() .queueName(QUEUE_NAME) .processMessage(ServiceBusClientConfiguration::processMessage) .processError(ServiceBusClientConfiguration::processError) .buildProcessorClient(); } private static void processMessage(ServiceBusReceivedMessageContext context) { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); } private static void processError(ServiceBusErrorContext context) { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); } }
Примечание.
Обязательно замените
<service-bus-fully-qualified-namespace>
заполнитель именем узла служебная шина из портал Azure. Замените<service-bus-queue-name>
заполнитель собственным именем очереди, настроенным в служебная шина пространстве имен.Введите клиентские бобы в приложение, как показано в следующем примере:
@SpringBootApplication public class ServiceBusQueueApplication implements CommandLineRunner { private final ServiceBusSenderClient senderClient; private final ServiceBusProcessorClient processorClient; public ServiceBusQueueApplication(ServiceBusSenderClient senderClient, ServiceBusProcessorClient processorClient) { this.senderClient = senderClient; this.processorClient = processorClient; } public static void main(String[] args) { SpringApplication.run(ServiceBusQueueApplication.class, args); } @Override public void run(String... args) throws Exception { // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.printf("Sent a message to the queue"); senderClient.close(); System.out.printf("Starting the processor"); processorClient.start(); TimeUnit.SECONDS.sleep(10); System.out.printf("Stopping and closing the processor"); processorClient.close(); } }
Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sent a message to the queue Starting the processor ... Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World! Stopping and closing the processor
В следующем списке показаны причины, по которым этот код не является гибким или изящным:
- Пространство имен и имена разделов и подписок жестко закодируются.
- Если вы используете
@Value
для получения конфигураций из среды Spring, в файле application.properties невозможно указать IDE. - Если у вас есть сценарий микрослужбы, необходимо дублировать код в каждом проекте, и это легко сделать ошибки и трудно быть согласованными.
К счастью, создание клиентских бобов самостоятельно не требуется с помощью Spring Cloud Azure. Вместо этого можно напрямую внедрить бобы и использовать свойства конфигурации, с которыми вы уже знакомы для настройки служебная шина.
Azure Spring Cloud также предоставляет следующие глобальные конфигурации для различных сценариев. Дополнительные сведения см. в разделе "Глобальная конфигурация для пакетов SDK службы Azure" конфигурации Spring Cloud.
- Параметры прокси-сервера.
- Параметры повтора.
- Параметры клиента транспорта AMQP.
Вы также можете подключиться к разным облакам Azure. Дополнительные сведения см. в статье "Подключение к разным облакам Azure".
Использование начального модуля JMS в Spring Cloud Служебная шина Azure
Модуль JMS Starter Служебная шина Azure Spring Cloud обеспечивает интеграцию Spring JMS с служебная шина. В следующем видео описывается интеграция приложений Spring JMS с Служебная шина Azure с помощью JMS 2.0.
В этом руководстве показано, как использовать Spring Cloud Служебная шина Azure Starter для API JMS для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль JMS Starter Служебная шина Azure Spring Cloud, добавьте следующие зависимости в файл pom.xml:
Выставление счетов за материалы Spring Cloud (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт JMS Spring Cloud Служебная шина Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте строка подключения и ценовую категорию для служебная шина, как показано в следующем примере:
spring.jms.servicebus.connection-string=<service-bus-namespace-connection-string> spring.jms.servicebus.pricing-tier=<service-bus-pricing-tier>
Создайте приемник сообщений.
Spring предоставляет средства для публикации сообщений в любом POJO (обычный старый объект Java). Сначала определите универсальный
User
класс, который хранит и извлекает имя пользователя, как показано в следующем примере:public class User implements Serializable { private static final long serialVersionUID = -295422703255886286L; private String name; public User() { } public User(String name) { setName(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Совет
Serializable
реализуется для использования методаsend
вJmsTemplate
на платформе Spring. В противном случае необходимо определить настраиваемуюMessageConverter
bean, чтобы сериализовать содержимое в формате JSON в текстовом формате. Дополнительные сведения оMessageConverter
см. в официальном проекте Spring JMS starter.Здесь можно создать новый
QueueReceiveService
класс Java, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@Component public class QueueReceiveService { private static final String QUEUE_NAME = "<service-bus-queue-name>"; @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory") public void receiveMessage(User user) { System.out.printf("Received a message from %s.", user.getName()); } }
Примечание.
Обязательно замените
<service-bus-queue-name>
заполнитель собственным именем очереди, настроенным в служебная шина пространстве имен.Если вы используете раздел или подписку, измените
destination
параметр в качестве имени раздела иcontainerFactory
должны бытьtopicJmsListenerContainerFactory
. Кроме того, добавьтеsubscription
параметр, чтобы описать имя подписки.Подключите отправителя и получателя для отправки и получения сообщений с помощью Spring, как показано в следующем примере:
@SpringBootApplication @EnableJms public class ServiceBusJmsStarterApplication { private static final String QUEUE_NAME = "<service-bus-queue-name>"; public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(ServiceBusJMSQueueApplication.class, args); JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class); // Send a message with a POJO - the template reuse the message converter System.out.println("Sending a user message."); jmsTemplate.convertAndSend(QUEUE_NAME, new User("Tom")); } }
Примечание.
Обязательно замените
<service-bus-queue-name>
заполнитель собственным именем очереди, настроенным в служебная шина пространстве имен.Совет
Обязательно добавьте
@EnableIntegration
заметку, которая активирует обнаружение методов, аннотированных с@JmsListener
помощью, создав контейнер прослушивателя сообщений под обложкой.Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sending a user message. Received a message from Tom.
Другие сведения
Дополнительные сведения см. в статье об использовании API JMS с служебная шина и AMQP 1.0.
Использование Spring Messaging Служебная шина Azure
Модуль Spring Messaging Служебная шина Azure предоставляет поддержку платформы Spring Messaging с служебная шина.
Если вы используете Spring Messaging Служебная шина Azure, можно использовать следующие функции:
ServiceBusTemplate
: отправляет сообщения в очереди и разделы служебная шина асинхронно и синхронно.@ServiceBusListener
: пометить метод, предназначенный для прослушивателя сообщений служебная шина в назначении.
В этом руководстве показано, как использовать Spring Messaging Служебная шина Azure для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль Spring Messaging Служебная шина Azure, добавьте следующие зависимости в файл pom.xml:
Выставление счетов за материалы Spring Cloud (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Начальные артефакты Spring Messaging служебная шина и Spring Cloud Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-messaging-azure-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте пространство имен и тип очереди для служебная шина, как показано в следующем примере:
spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name> spring.cloud.azure.servicebus.entity-type=queue
Примечание.
Если вы используете раздел или подписку, измените
spring.cloud.azure.servicebus.entity-type
значениеtopic
на .Создайте класс
ConsumerService
Java, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@Service public class ConsumerService { private static final String QUEUE_NAME = "<service-bus-queue-name>"; @ServiceBusListener(destination = QUEUE_NAME) public void handleMessageFromServiceBus(String message) { System.out.printf("Consume message: %s%n", message); } }
Примечание.
Если вы используете раздел или подписку, измените параметр
destination
заметки в качестве имени раздела и добавьтеgroup
параметр, чтобы описать имя подписки.Подключите отправителя и получателя для отправки и получения сообщений с помощью Spring, как показано в следующем примере:
@SpringBootApplication @EnableAzureMessaging public class Application { private static final String QUEUE_NAME = "<service-bus-queue-name>"; public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class); ServiceBusTemplate serviceBusTemplate = applicationContext.getBean(ServiceBusTemplate.class); System.out.println("Sending a message to the queue."); serviceBusTemplate.sendAsync(QUEUE_NAME, MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
Совет
Обязательно добавьте
@EnableAzureMessaging
заметку, которая активирует обнаружение методов, аннотированных с@ServiceBusListener
помощью, создав контейнер прослушивателя сообщений под обложкой.Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sending a message to the queue. Consume message: Hello world.
Использование spring Integration Служебная шина Azure
Модуль Spring Integration Служебная шина Azure предоставляет поддержку платформы Spring Integration с служебная шина.
Если приложение Spring использует каналы сообщений Spring Integration, можно направлять сообщения между каналами сообщений и служебная шина с помощью адаптеров каналов.
Адаптер входящего канала пересылает сообщения из очереди или подписки служебная шина в канал сообщений. Адаптер исходящего канала публикует сообщения из канала сообщений в очередь и раздел служебная шина.
В этом руководстве показано, как использовать Spring Integration Служебная шина Azure для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль Starter интеграции Spring Cloud Служебная шина Azure, добавьте следующие зависимости в файл pom.xml:
Выставление счетов за материалы Spring Cloud (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт интеграции Spring Cloud Служебная шина Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте пространство имен служебная шина, как показано в следующем примере:
spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name>
Создайте класс
QueueReceiveConfiguration
Java, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@Configuration public class QueueReceiveConfiguration { private static final String INPUT_CHANNEL = "queue.input"; private static final String QUEUE_NAME = "<your-servicebus-queue-name>"; private static final String SERVICE_BUS_MESSAGE_LISTENER_CONTAINER = "queue-listener-container"; /** * This message receiver binding with {@link ServiceBusInboundChannelAdapter} * via {@link MessageChannel} has name {@value INPUT_CHANNEL} */ @ServiceActivator(inputChannel = INPUT_CHANNEL) public void messageReceiver(byte[] payload) { String message = new String(payload); System.out.printf("New message received: '%s'%n", message); } @Bean(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER) public ServiceBusMessageListenerContainer messageListenerContainer(ServiceBusProcessorFactory processorFactory) { ServiceBusContainerProperties containerProperties = new ServiceBusContainerProperties(); containerProperties.setEntityName(QUEUE_NAME); return new ServiceBusMessageListenerContainer(processorFactory, containerProperties); } @Bean public ServiceBusInboundChannelAdapter queueMessageChannelAdapter( @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel, @Qualifier(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER) ServiceBusMessageListenerContainer listenerContainer) { ServiceBusInboundChannelAdapter adapter = new ServiceBusInboundChannelAdapter(listenerContainer); adapter.setOutputChannel(inputChannel); return adapter; } @Bean(name = INPUT_CHANNEL) public MessageChannel input() { return new DirectChannel(); } }
Создайте класс
QueueSendConfiguration
Java, как показано в следующем примере. Этот класс используется для определения отправителя сообщения.@Configuration public class QueueSendConfiguration { private static final String OUTPUT_CHANNEL = "queue.output"; private static final String QUEUE_NAME = "<your-servicebus-queue-name>"; @Bean @ServiceActivator(inputChannel = OUTPUT_CHANNEL) public MessageHandler queueMessageSender(ServiceBusTemplate serviceBusTemplate) { serviceBusTemplate.setDefaultEntityType(ServiceBusEntityType.QUEUE); DefaultMessageHandler handler = new DefaultMessageHandler(QUEUE_NAME, serviceBusTemplate); handler.setSendCallback(new ListenableFutureCallback<Void>() { @Override public void onSuccess(Void result) { System.out.println("Message was sent successfully."); } @Override public void onFailure(Throwable ex) { System.out.println("There was an error sending the message."); } }); return handler; } /** * Message gateway binding with {@link MessageHandler} * via {@link MessageChannel} has name {@value OUTPUT_CHANNEL} */ @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL) public interface QueueOutboundGateway { void send(String text); } }
Подключите отправителя и получателя для отправки и получения сообщений с помощью Spring, как показано в следующем примере:
@SpringBootApplication @EnableIntegration @Configuration(proxyBeanMethods = false) public class ServiceBusIntegrationApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(ServiceBusIntegrationApplication.class, args); QueueSendConfiguration.QueueOutboundGateway outboundGateway = applicationContext.getBean(QueueSendConfiguration.QueueOutboundGateway.class); System.out.println("Sending a message to the queue"); outboundGateway.send("Hello World"); } }
Совет
Обязательно добавьте заметку
@EnableIntegration
, которая включает инфраструктуру Spring Integration.Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Message was sent successfully. New message received: 'Hello World'
Использование привязки Spring Cloud Stream служебная шина
Чтобы вызвать API служебная шина в приложении Spring Cloud Stream, используйте модуль Spring Cloud Служебная шина Azure Stream Binder.
В этом руководстве показано, как использовать Spring Cloud Stream служебная шина Binder для отправки сообщений в служебная шина и получения сообщений.
Добавление зависимости служебная шина
Чтобы установить модуль Stream Binder Spring Cloud Служебная шина Azure, добавьте в файл pom.xml следующие зависимости:
Выставление счетов за материалы Spring Cloud (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.0
. Этот счет материалов (BOM) должен быть настроен в<dependencyManagement>
разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".Артефакт интеграции Spring Cloud Служебная шина Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте пространство имен служебная шина, как показано в следующем примере:
spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>
Создайте приемник сообщений.
Чтобы использовать приложение в качестве приемника событий, настройте привязщик ввода, указав следующие сведения:
Объявите боб, определяющий логику
Consumer
обработки сообщений. Например, следующаяConsumer
фасоль называетсяconsume
:@Bean public Consumer<Message<String>> consume() { return message -> { System.out.printf("New message received: '%s'.%n", message.getPayload()); }; }
Добавьте конфигурацию, чтобы указать
queue
имя для использования, заменив<service-bus-queue-name>
заполнитель, как показано в следующем примере:# name for the `Consumer` bean spring.cloud.function.definition=consume spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-queue-name>
Примечание.
Чтобы использовать из подписки служебная шина, обязательно измените
consume-in-0
свойства привязки, как показано в следующем примере:spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-topic-name> spring.cloud.stream.bindings.consume-in-0.group=<service-bus-subscription-name>
Создайте отправителя сообщения.
Чтобы использовать приложение в качестве источника событий, настройте выходной привязку, указав следующие сведения:
Определите bean, определяющий
Supplier
, откуда приходят сообщения в приложении.@Bean return () -> { System.out.println("Sending a message."); return MessageBuilder.withPayload("Hello world").build(); }; }
Добавьте конфигурацию, чтобы указать
queue
имя отправки, заменив<your-servicebus-queue-name>
заполнитель в следующем примере:# "consume" is added from the previous step spring.cloud.function.definition=consume;supply spring.cloud.stream.bindings.supply-out-0.destination=<your-servicebus-queue-name> spring.cloud.stream.servicebus.bindings.supply-out-0.producer.entity-type=queue
Примечание.
Чтобы отправить в раздел служебная шина, обязательно измените его на
entity-type
topic
.
Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sending a message. New message received: 'Hello world'.
Развертывание в Azure Spring Apps
Теперь, когда у вас есть приложение Spring Boot, работающее локально, пришло время переместить его в рабочую среду. Azure Spring Apps упрощает развертывание приложений Spring Boot в Azure без каких-либо изменений кода. Эта служба управляет инфраструктурой приложений Spring, благодаря чему разработчики могут сосредоточиться на коде. Azure Spring Apps обеспечивает управление жизненным циклом за счет комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, выполнения сине-зеленых развертываний и прочего. Сведения о развертывании приложения в Azure Spring Apps см. в статье "Развертывание первого приложения в Azure Spring Apps".
Следующие шаги
См. также
Дополнительные сведения о дополнительных начальных средах Spring Boot, доступных для Microsoft Azure, см. в статье "Что такое Spring Cloud Azure?"