Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как использовать Служебная шина Azure в приложениях Java, созданных с помощью платформы Spring Framework.
Azure предоставляет асинхронную платформу обмена сообщениями с именем Служебная шина Azure (служебная шина), которая основана на стандарте Advanced Message Queueing Protocol 1.0 (AMQP 1.0). Вы можете использовать служебная шина в диапазоне поддерживаемых платформ Azure.
Spring Cloud Azure предоставляет различные модули для отправки и получения сообщений из очередей служебная шина queues, topics/ и subscriptions с помощью фреймворков 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 Message Channel с служебная шина.
Spring Cloud Stream Binder для служебная шина позволяет использовать служебная шина в качестве промежуточного слоя передачи сообщений в приложениях Spring Cloud Stream.
Предварительные условия
- Подписка Azure — создайте бесплатно.
- Java платформа разработки (JDK) версии 8 или более поздней.
- Apache Maven версии 3.0 или более поздней.
- Служебная шина Azure и очередь или тема/подписка. Если у вас его нет, создайте очередь или раздел служебная шина. Дополнительные сведения см. в статьях Использование портала Azure для создания пространства имен служебная шина и очереди или Использование портала Azure для создания темы служебная шина и подписок на неё.
- Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Maven Project и в разделе Dependencies добавьте Spring Web зависимость и выберите Java версии 8 или более поздней.
Примечание.
Чтобы предоставить вашей учетной записи доступ к ресурсам служебная шина, в вашем вновь созданном пространстве имен Служебная шина Azure назначьте учетной записи Microsoft Entra роли Служебная шина Azure Data Sender и Служебная шина Azure Data Receiver, которые вы используете в настоящее время. Для получения дополнительной информации см. в разделе Назначение ролей Azure в портале Azure.
Внимание
Для выполнения действий, описанных в этом руководстве, требуется Spring Boot версии 2.5 или более поздней.
Подготовьте локальную среду
В этом руководстве конфигурации и код не имеют никаких операций проверки подлинности. Однако для подключения к службе Azure требуется проверка подлинности. Чтобы завершить проверку подлинности, необходимо использовать клиентская библиотека Azure Identity. Spring Cloud Azure использует DefaultAzureCredential, которую предоставляет библиотека удостоверений Azure для получения учетных данных без необходимости изменения кода.
DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какой метод следует использовать во время выполнения. Этот подход позволяет приложению использовать различные методы проверки подлинности в разных средах, таких как локальные или рабочие среды, без реализации кода для конкретной среды. Дополнительные сведения см. в разделе DefaultAzureCredential из раздела Аутентификация Java-приложений, размещенных в Azure.
Для аутентификации с помощью Azure CLI, IntelliJ или других методов в локальных средах разработки см. раздел Аутентификация в Azure в средах разработки Java. Чтобы завершить проверку подлинности в средах размещения Azure, рекомендуется использовать управляемое удостоверение. Дополнительные сведения см. в разделе Управляемые удостоверения для ресурсов Azure?
Примечание.
Служебная шина Azure для API JMS в настоящее время не поддерживает DefaultAzureCredential. Если вы используете Spring JMS с служебная шина, пропустите этот шаг.
Использование стартеров Spring Cloud для Служебная шина Azure
Модуль Spring Cloud Служебная шина Azure Starter импортирует клиентскую библиотеку служебная шина Java в рамках платформы Spring Boot. Вы можете использовать Spring Cloud Azure и Azure SDK вместе в не взаимоисключающем режиме. Таким образом, вы можете продолжать использовать api клиента служебная шина Java в приложении Spring.
Добавление зависимости служебная шина
Чтобы установить модуль Spring Cloud Служебная шина Azure Starter, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.2.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.2.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого 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, имеет следующие преимущества при сравнении со вторым способом. Эти преимущества обеспечивают более гибкий и эффективный опыт при разработке с помощью клиентов служебная шина.
Вы можете использовать внешнюю конфигурацию , чтобы работать с одинаковым кодом приложения в разных средах.
Вы можете поручить процесс изучения паттерна builder и регистрации этого клиента в контексте приложения фреймворку Spring Boot. Это делегирование позволяет сосредоточиться на использовании клиентов, учитывая ваши бизнес-требования.
С помощью индикатора работоспособности можно легко проверить состояние и работоспособность приложения и внутренних компонентов.
В следующем примере кода показано, как использовать ServiceBusSenderClient и ServiceBusProcessorClient с этими двумя вариантами.
Примечание.
пакет SDK Azure Java для служебная шина предоставляет нескольким клиентам возможность взаимодействовать с служебная шина. Стартер также предоставляет автоконфигурацию для всех клиентов и создателей клиентов служебная шина. Здесь мы используем только 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.Создайте класс
ServiceBusProcessorClientConfigurationJava, как показано в следующем примере. Этот класс используется для регистрации обработчика сообщений и ошибок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. В следующем примере кода показано, как это сделать:
Создайте класс
ServiceBusClientConfigurationJava, как показано в следующем примере. Этот класс используется для объявления компонентов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. Вместо этого можно напрямую внедрять компоненты и использовать свойства конфигурации, с которыми вы уже знакомы, для настройки служебная шина.
Spring Cloud Azure также предоставляет следующие глобальные конфигурации для различных сценариев. Дополнительные сведения см. в разделе Глобальная конфигурация для Azure Service SDKs из конфигурация Spring Cloud Azure.
- Параметры прокси-сервера.
- Настройки повторного выполнения.
- Параметры клиента транспорта AMQP.
Вы также можете подключиться к разным Azure облакам. Для получения дополнительной информации см. раздел Подключение к различным облакам Azure.
Используйте Spring Cloud Служебная шина Azure JMS Starter
Модуль Spring Cloud Служебная шина Azure JMS Starter предоставляет интеграцию Spring JMS с служебная шина. В следующем видео описывается интеграция приложений Spring JMS с Служебная шина Azure с помощью JMS 2.0.
В этом руководстве показано, как использовать Spring Cloud Служебная шина Azure Starter для API JMS для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль JMS Starter Служебная шина Azure Spring Cloud, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.2.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.2.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого 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для сериализации содержимого в текстовом формате JSON. Дополнительные сведения оMessageConverterсм. в официальном проекте Spring JMS starter.Здесь можно создать новый класс
QueueReceiveServiceJava, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@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 Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.2.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.2.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого 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.Создайте класс
ConsumerServiceJava, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@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.
Использование Служебная шина Azure в Spring Integration
Модуль Spring Integration Служебная шина Azure предоставляет поддержку для платформы Spring Integration с использованием служебная шина.
Если приложение Spring использует каналы сообщений Spring Integration, вы можете направлять сообщения между каналами сообщений и служебная шина с помощью адаптеров каналов.
Адаптер входящего канала пересылает сообщения из очереди или подписки служебная шина в канал сообщений. Адаптер исходящего канала публикует сообщения из канала сообщений в очередь и раздел служебная шина.
В этом руководстве показано, как использовать Spring Integration Служебная шина Azure для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль Spring Cloud Служебная шина Azure Integration Starter, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.2.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.2.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого 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>Создайте класс
QueueReceiveConfigurationJava, как показано в следующем примере. Этот класс используется для определения приемника сообщений.@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(); } }Создайте класс
QueueSendConfigurationJava, как показано в следующем примере. Этот класс используется для определения отправителя сообщения.@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 для отправки сообщений и получения сообщений из служебная шина.
Добавление зависимости служебная шина
Чтобы установить модуль Spring Cloud Служебная шина Azure Stream Binder, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.2.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.2.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого 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
Теперь, когда у вас есть приложение Spring Boot, работающее локально, пришло время переместить его в рабочую среду. Приложения Azure Spring упрощает развертывание приложений Spring Boot для Azure без каких-либо изменений кода. Эта служба управляет инфраструктурой приложений Spring, благодаря чему разработчики могут сосредоточиться на коде. Приложения Azure Spring обеспечивает управление жизненным циклом с помощью комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, развертывания по схеме blue-green и прочее. Чтобы развернуть ваше приложение в Приложения Azure Spring, см. раздел Как развернуть первое приложение в Приложения Azure Spring.
Следующие шаги
См. также
Дополнительные сведения о дополнительных модулях Spring Boot, доступных для Microsoft Azure, см. в разделе Что такое Spring Cloud Azure?