Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как использовать Azure Service Bus в приложениях Java, созданных с помощью платформы Spring Framework.
Azure предоставляет асинхронную платформу обмена сообщениями с именем Azure Service Bus (Service Bus), которая основана на стандарте Advanced Message Queueing Protocol 1.0 (AMQP 1.0). Вы можете использовать Service Bus в диапазоне поддерживаемых платформ Azure.
Spring Cloud Azure предоставляет различные модули для отправки сообщений в Service Bus queues и topics/subscriptions с помощью платформ Spring.
Для разных вариантов использования можно использовать следующие модули независимо или объединить их.
Spring Cloud Azure Service Bus Starter позволяет отправлять и получать сообщения с клиентской библиотекой пакета SDK Service Bus Java с функциями Spring Boot.
Spring Cloud Azure Service Bus JMS Starter позволяет использовать API JMS для отправки и получения сообщений с очередями Service Bus, а также с темами и подписками.
Spring Messaging Azure Service Bus позволяет взаимодействовать с Service Bus через API Spring Messaging.
Spring Integration Azure Service Bus позволяет подключать каналы Spring Integration Message Channel с Service Bus.
Spring Cloud Stream Binder для Service Bus позволяет применять Service Bus как посредник в системах обмена сообщениями в приложениях Spring Cloud Stream.
Предварительные условия
- Подписка Azure — создать бесплатно.
- Java Development Kit (JDK) версии 8 или более поздней.
- Apache Maven версии 3.0 или более поздней.
- Azure Service Bus и очередь, или тема/подписка. Если у вас его нет, создайте очередь или тему в «Service Bus». Дополнительные сведения см. в статье Использование портала Azure для создания пространства имен Service Bus и очереди или Использование портала Azure для создания темы Service Bus и подписок на тему.
- Если у вас нет приложения Spring Boot, создайте проект Maven с помощью Spring Initializr. Обязательно выберите Maven Project и в разделе Dependencies добавьте Spring Web и выберите Java версии 8 или более поздней.
Примечание.
Чтобы предоставить вашей учетной записи доступ к ресурсам вашего Service Bus, в созданном пространстве имен Azure Service Bus назначьте роли Azure Service Bus Data Sender и Azure Service Bus Data Receiver учетной записи Microsoft Entra, которую вы используете в настоящее время. Дополнительные сведения см. в разделе Назначение ролей 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 Service Bus для API JMS в настоящее время не поддерживает DefaultAzureCredential. Если вы используете Spring JMS с Service Bus, пропустите этот шаг.
Использование начального Azure Service Bus Spring Cloud
Модуль Spring Cloud Azure Service Bus Starter импортирует клиентскую библиотеку Service Bus Java вместе с фреймворком Spring Boot. Вы можете использовать Spring Cloud Azure и Azure SDK вместе в неисключаемом шаблоне. Таким образом, вы можете продолжать использовать api клиента Service Bus Java в приложении Spring.
Добавление зависимости Service Bus
Чтобы установить модуль Spring Cloud Azure Service Bus Starter, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.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 Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
В этом руководстве описано, как использовать клиенты Service Bus Java в контексте приложения Spring. Здесь мы представляем две альтернативы. Рекомендуется использовать автоматическую настройку Spring Boot и использовать встроенные клиенты из контекста Spring. Альтернативным способом является создание клиентов с помощью программирования.
Первый способ, который включает автоматическое связывание клиентских бинов из контейнера Spring IoC, имеет следующие преимущества при сравнении со вторым способом. Эти преимущества обеспечивают более гибкий и эффективный опыт при разработке с помощью клиентов Service Bus.
Вы можете использовать внешнюю конфигурацию , чтобы работать с одинаковым кодом приложения в разных средах.
Вы можете поручить процесс изучения паттерна builder и регистрации этого клиента в контексте приложения фреймворку Spring Boot. Это делегирование позволяет сосредоточиться на использовании клиентов, учитывая ваши бизнес-требования.
С помощью индикатора работоспособности можно легко проверить состояние и работоспособность приложения и внутренних компонентов.
В следующем примере кода показано, как использовать ServiceBusSenderClient и ServiceBusProcessorClient с этими двумя вариантами.
Примечание.
пакет SDK Azure Java для Service Bus предоставляет нескольким клиентам возможность взаимодействовать с Service Bus. Начальный элемент также предоставляет автоматическую настройку для всех Service Bus клиентов и построителей клиентов. Здесь мы используем только ServiceBusSenderClient и ServiceBusProcessorClient в качестве примеров.
Использование автоматической настройки Spring Boot
Чтобы отправлять сообщения и получать сообщения из Service Bus, настройте приложение, выполнив следующие действия.
Настройте пространство имен и очередь Service Bus, как показано в следующем примере:
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Совет
Здесь мы используем очередь Service Bus в качестве примера. Чтобы использовать тему/подписку, необходимо добавить свойство
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!
Создание клиентов Service Bus программным способом
Вы можете создать эти клиентские бины самостоятельно, но процесс сложный. В приложениях 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>именем узла Service Bus на портале Azure. Замените заполнитель<service-bus-queue-name>собственным именем очереди, настроенным в пространстве имен Service Bus.Внедрите клиентские компоненты в приложение, как показано в следующем примере:
@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 не требуется самостоятельно собирать клиентские бины. Вместо этого вы можете напрямую внедрить бины и использовать свойства конфигурации, с которыми вы уже знакомы, для настройки Service Bus.
Spring Cloud Azure также предоставляет следующие глобальные конфигурации для различных сценариев. Дополнительные сведения см. в разделе Глобальная конфигурация для Azure Service SDK в конфигурации Spring Cloud Azure.
- Параметры прокси-сервера.
- Настройки повторного выполнения.
- Параметры клиента транспорта AMQP.
Вы также можете подключиться к разным Azure облакам. Дополнительные сведения см. в разделе Подключение к различным облакам Azure.
Использование начального модуля JMS Spring Cloud Azure Service Bus
Модуль Spring Cloud Azure Service Bus JMS Starter предоставляет интеграцию Spring JMS с Service Bus. В следующем видео описывается интеграция приложений Spring JMS с Azure Service Bus с помощью JMS 2.0.
В этом руководстве показано, как использовать Spring Cloud Azure Service Bus Starter для API JMS для отправки сообщений и получения сообщений из Service Bus.
Добавление зависимости Service Bus
Чтобы установить модуль JMS Starter Azure Service Bus Spring Cloud, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.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 Service Bus JMS:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте строку подключения и ценовую категорию для Service Bus, как показано в примере ниже.
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>собственным именем очереди, настроенным в пространстве имен Service Bus.Если вы используете раздел или подписку, измените параметр
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>собственным именем очереди, настроенным в пространстве имен Service Bus.Совет
Обязательно добавьте
@EnableIntegrationаннотацию, которая активирует обнаружение методов, аннотированных с помощью@JmsListener, создавая контейнер прослушивателя сообщений за кулисами.Запустите приложение. Вы видите журналы, аналогичные следующему примеру:
Sending a user message. Received a message from Tom.
Другие сведения
Дополнительные сведения см. в разделе Как использовать API JMS с Service Bus и AMQP 1.0.
Используйте Spring Messaging с Azure Service Bus
Модуль Spring Messaging Azure Service Bus предоставляет поддержку платформы Spring Messaging с Service Bus.
Если вы используете Spring Messaging Azure Service Bus, вы можете использовать следующие функции:
-
ServiceBusTemplate: отправка сообщений в очереди и разделы Service Bus асинхронно и синхронно. -
@ServiceBusListener: пометьте метод, чтобы он стал целью для прослушивателя сообщений Service Bus по назначению.
В этом руководстве показано, как использовать Spring Messaging Azure Service Bus для отправки сообщений и получения сообщений из Service Bus.
Добавление зависимости Service Bus
Чтобы установить модуль Spring Messaging Azure Service Bus, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.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 Service Bus и 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>
Код приложения для отправки и получения сообщений
Настройте пространство имен и тип очереди для Service Bus, как показано в следующем примере:
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.
Использование Spring Integration Azure Service Bus
Модуль Spring Integration Azure Service Bus предоставляет поддержку фреймворку Spring Integration с Service Bus.
Если приложение Spring использует каналы сообщений Spring Integration, вы можете направлять сообщения между каналами сообщений и Service Bus с помощью адаптеров каналов.
Адаптер входящего канала передаёт сообщения из очереди или подписки Service Bus в канал сообщений. Адаптер исходящего канала публикует сообщения из канала сообщений в очередь и раздел Service Bus.
В этом руководстве показано, как использовать Spring Integration Azure Service Bus для отправки сообщений и получения сообщений из Service Bus.
Добавление зависимости Service Bus
Чтобы установить модуль интеграции Spring Cloud Azure Service Bus Starter, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.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 Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте пространство имен Service Bus, как показано в следующем примере:
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 Service Bus Binder
Чтобы вызвать API Service Bus в приложении Spring Cloud Stream, используйте модуль Spring Cloud Azure Service Bus Stream Binder.
В этом руководстве показано, как использовать Spring Cloud Stream Service Bus Binder для отправки сообщений и получения сообщений из Service Bus.
Добавление зависимости Service Bus
Чтобы установить модуль Spring Cloud Azure Service Bus Stream Binder, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.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 Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Настройте пространство имен Service Bus, как показано в следующем примере:
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>Примечание.
Чтобы потреблять из подписки Service Bus, обязательно измените свойства привязки
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Примечание.
Чтобы отправить в раздел Service Bus, обязательно измените
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, развертывания по схеме blue-green и многого другого. Чтобы развернуть ваше приложение в Azure Spring Apps, см. статью Развертывание первого приложения в Azure Spring Apps.
Следующие шаги
См. также
Дополнительные сведения о стартовых модулях Spring Boot, доступных для Microsoft Azure, см. в разделе Что такое Spring Cloud Azure?