Поделиться через


Использование JMS в Spring для доступа к Azure Service Bus

В этом руководстве показано, как использовать Spring Boot Starter для Azure Service Bus JMS для отправки сообщений в Service Bus queues и topics.

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

Начальная версия Spring Boot для Azure Service Bus JMS обеспечивает интеграцию Spring JMS с Service Bus.

В следующем видео описывается интеграция приложений Spring JMS с Azure Service Bus с помощью JMS 2.0.


В этом руководстве мы рассмотрим два метода проверки подлинности: проверку подлинности Microsoft Entra и проверку подлинности Shared Access Signatures (SAS), . На вкладке Passwordless показана проверка подлинности Microsoft Entra, а на вкладке Connection string — проверка подлинности SAS.

Аутентификация Microsoft Entra — это механизм подключения к Azure Service Bus JMS с использованием идентичностей из Microsoft Entra ID. С помощью проверки подлинности Microsoft Entra вы можете управлять удостоверениями пользователей базы данных и другими службами Майкрософт в центральном расположении, что упрощает управление разрешениями.

Проверка подлинности SAS использует строку подключения пространства имен Azure Service Bus для делегированного доступа к Service Bus JMS. Если вы решили использовать подписи общего доступа в качестве учетных данных, необходимо самостоятельно управлять строкой подключения.

Требования

Внимание

Для выполнения действий, описанных в этом руководстве, требуется Spring Boot версии 2.5 или более поздней.

Отправка и получение сообщений от Azure Service Bus

С помощью очереди или раздела для Azure Service Bus можно отправлять и получать сообщения с помощью Spring Cloud Azure Service Bus JMS.

Чтобы установить модуль 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 Starter:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

Кодировать приложение

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

  1. Настройте учетные данные Service Bus, добавив следующие свойства в файл application.properties.

    Примечание.

    Azure Service Bus JMS поддерживает использование Microsoft Entra ID для авторизации запросов к Service Bus ресурсам. С помощью Microsoft Entra ID можно использовать Ролевое управление доступом Azure (Azure RBAC) для предоставления разрешений участнику безопасности, которым может быть пользователь или служба-программа приложения.

    Внимание

    Перед началом работы убедитесь, что вы назначили роль Azure Service Bus Data Owner учетной записи Microsoft Entra, которую вы в данный момент используете. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    В следующей таблице описаны поля в конфигурации:

    Поле Описание
    spring.jms.servicebus.namespace Укажите пространство имен, которое вы получили в экземпляре службы Service Bus на портале Azure.
    spring.jms.servicebus.pricing-tier Выберите ценовую категорию для служебной шины. Поддерживаемые значения: premium и standard. Уровень "Премиум" использует Java службу сообщений (JMS) 2.0, а уровень "Стандартный" использует JMS 1.1 для взаимодействия с Azure Service Bus.
    spring.jms.servicebus.passwordless-enabled Укажите, следует ли использовать метод аутентификации без пароля.
    spring.jms.listener.receive-timeout По умолчанию значение времени ожидания получения равно 1000. Рекомендуется задать для него значение 60000
  2. Добавьте @EnableJms, чтобы включить поддержку аннотированных конечных точек слушателя JMS. Используется JmsTemplate для отправки сообщений и @JmsListener получения сообщений, как показано в следующем примере:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.jms.annotation.EnableJms;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.jms.core.JmsTemplate;
    
    @SpringBootApplication
    @EnableJms
    public class ServiceBusJMSQueueApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class);
        private static final String QUEUE_NAME = "<QueueName>";
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(String message) {
            LOGGER.info("Message received: {}", message);
        }
    
    }
    

    Замените <QueueName> собственным именем очереди, настроенным в пространстве имен Service Bus.

    Совет

    В этом руководстве нет операций проверки подлинности в конфигурациях или коде. Однако для подключения к службам Azure требуется проверка подлинности. Чтобы завершить проверку подлинности, необходимо использовать удостоверение Azure. Spring Cloud Azure использует DefaultAzureCredential, который предоставляет библиотека идентификации Azure, чтобы помочь вам получить учетные данные без каких-либо изменений кода.

    DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какой метод следует использовать во время выполнения. Этот подход позволяет приложению использовать различные методы проверки подлинности в разных средах (например, локальных и рабочих средах), не реализуя код, зависящий от среды. Дополнительные сведения см. в разделе DefaultAzureCredential.

    Для выполнения проверки подлинности в локальных средах разработки можно использовать Azure CLI, Visual Studio Code, PowerShell или другие методы. Дополнительные сведения см. в разделе Аутентификация Azure в средах разработки на Java. Чтобы завершить проверку подлинности в средах размещения Azure, рекомендуется использовать управляемое удостоверение, назначаемое пользователем. Дополнительные сведения см. в разделе Управляемые удостоверения для ресурсов Azure.

  3. Запустите приложение. Вы должны увидеть Sending message и Hello World, опубликованные в журнале приложений, как показано в следующем примере выходных данных:

    Sending message
    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.

Следующие шаги