Использование JMS в Spring для доступа к Служебная шина Azure

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

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

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

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


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

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

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

Требования

Внимание

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

Отправка и получение сообщений от Служебная шина Azure

С помощью очереди или темы для Служебная шина Azure можно отправлять и получать сообщения, используя Spring Cloud Служебная шина Azure 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.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Примечание.

    Если вы используете Spring Boot 4.0.x, установите для нее spring-cloud-azure-dependencies значение .7.4.0

    Если вы используете Spring Boot 3.5.x, установите для нее spring-cloud-azure-dependencies значение 6.5.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 JMS Starter:

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

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

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

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

    Примечание.

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

    Внимание

    Перед началом работы убедитесь, что вы назначили роль Служебная шина Azure владельца данных учетной записи 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 Укажите пространство имен, которое вы получили в своей службе служебная шина на портале Azure.
    spring.jms.servicebus.pricing-tier Выберите ценовую категорию для служебной шины. Поддерживаемые значения: premium и standard. Уровень "Премиум" использует Java службу сообщений (JMS) 2.0, а уровень "Стандартный" использует JMS 1.1 для взаимодействия с Служебная шина Azure.
    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> собственным именем очереди, настроенным в пространстве имен служебная шина.

    Совет

    В этом руководстве нет операций проверки подлинности в конфигурациях или коде. Однако для подключения к службам 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

Теперь, когда у вас есть приложение Spring Boot, работающее локально, пришло время переместить его в рабочую среду. Приложения Azure Spring упрощает развертывание приложений Spring Boot для Azure без каких-либо изменений кода. Эта служба управляет инфраструктурой приложений Spring, благодаря чему разработчики могут сосредоточиться на коде. Приложения Azure Spring обеспечивает управление жизненным циклом с помощью комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, развертывания по схеме blue-green и прочее. Чтобы развернуть ваше приложение в Приложения Azure Spring, см. раздел Как развернуть первое приложение в Приложения Azure Spring.

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