Использование Служебная шина Azure в приложениях Spring

В этой статье показано, как использовать Служебная шина Azure в приложениях Java, созданных с помощью платформы Spring Framework.

Azure предоставляет асинхронную платформу обмена сообщениями с именем Служебная шина Azure (служебная шина), которая основана на стандарте Advanced Message Queueing Protocol 1.0 (AMQP 1.0). Вы можете использовать служебная шина в диапазоне поддерживаемых платформ Azure.

Spring Cloud Azure предоставляет различные модули для отправки и получения сообщений из очередей служебная шина queues, topics/ и subscriptions с помощью фреймворков Spring.

Для разных вариантов использования можно использовать следующие модули независимо или объединить их.

Предварительные условия

Примечание.

Чтобы предоставить вашей учетной записи доступ к ресурсам служебная шина, в вашем вновь созданном пространстве имен Служебная шина 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

Чтобы отправлять сообщения и получать сообщения из служебная шина, настройте приложение, выполнив следующие действия.

  1. Настройте пространство имен и очередь служебная шина, как показано в следующем примере:

    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.

  2. Создайте класс 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());
            };
        }
    }
    
  3. Внедрите 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.

  4. Запустите приложение. Вы видите журналы, аналогичные следующему примеру:

    Sent a message to the queue
    Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World!
    

Создание клиентов служебная шина программным способом

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

  1. Создайте класс 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> собственным именем очереди, настроенным в пространстве имен служебная шина.

  2. Внедрите клиентские компоненты в приложение, как показано в следующем примере:

    @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();
        }
    
    }
    
  3. Запустите приложение. Вы видите журналы, аналогичные следующему примеру:

    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>
    

Код приложения для отправки и получения сообщений

  1. Настройте строку подключения и ценовую категорию для служебная шина, как показано в следующем примере:

    spring.jms.servicebus.connection-string=<service-bus-namespace-connection-string>
    spring.jms.servicebus.pricing-tier=<service-bus-pricing-tier>
    
  2. Создайте приемник сообщений.

    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.

  3. Здесь можно создать новый класс 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 параметр, чтобы описать имя подписки.

  4. Подключите отправителя и получателя для отправки и получения сообщений с помощью 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, создавая контейнер прослушивателя сообщений за кулисами.

  5. Запустите приложение. Вы видите журналы, аналогичные следующему примеру:

    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>
    

Код приложения для отправки и получения сообщений

  1. Настройте пространство имен и тип очереди для служебная шина, как показано в следующем примере:

    spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>
    spring.cloud.azure.servicebus.entity-type=queue
    

    Примечание.

    Если вы используете тему или подписку, измените значение spring.cloud.azure.servicebus.entity-type на topic.

  2. Создайте класс 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, чтобы описать имя подписки.

  3. Подключите отправителя и получателя для отправки и получения сообщений с помощью 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, создавая контейнер прослушивателя сообщений за кулисами.

  4. Запустите приложение. Вы видите журналы, аналогичные следующему примеру:

    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>
    

Код приложения для отправки и получения сообщений

  1. Настройте пространство имен служебная шина, как показано в следующем примере:

    spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name>
    
  2. Создайте класс 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();
        }
    }
    
  3. Создайте класс 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);
        }
    }
    
  4. Подключите отправителя и получателя для отправки и получения сообщений с помощью 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.

  5. Запустите приложение. Вы видите журналы, аналогичные следующему примеру:

    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>
    

Код приложения для отправки и получения сообщений

  1. Настройте пространство имен служебная шина, как показано в следующем примере:

    spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>
    
  2. Создайте приемник сообщений.

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

    • Объявите бин, определяющий логику 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>
      
  3. Создайте отправителя сообщения.

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

    • Определите 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.

  4. Запустите приложение. Вам показываются логи, аналогичные следующему примеру:

    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?