Использование 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 и проверку подлинности ПОДПИСАННЫХ URL-адресов (SAS). На вкладке "Без пароля" показана проверка подлинности Microsoft Entra, а на вкладке строки Подключение ion отображается проверка подлинности SAS.

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

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

Необходимые компоненты

Важно!

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

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

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

Чтобы установить модуль JMS Starter Служебная шина Azure Spring Cloud, добавьте следующие зависимости в файл pom.xml:

  • Выставление счетов за материалы Spring Cloud (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.9.1</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Примечание.

    Если вы используете Spring Boot 2.x, обязательно установите для нее spring-cloud-azure-dependencies значение 4.15.0. Этот счет материалов (BOM) должен быть настроен в <dependencyManagement> разделе pom.xml файла. Это гарантирует, что все зависимости Azure Spring Cloud используют одну и ту же версию. Дополнительные сведения о версии, используемой для этого BOM, см. в статье "Какая версия Spring Cloud Azure должна использоваться".

  • Артефакт Начального модуля JMS spring Cloud Служебная шина Azure:

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

Добавление кода приложения

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

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

    Примечание.

    Служебная шина Azure JMS поддерживает использование идентификатора Microsoft Entra для авторизации запросов к служебная шина ресурсам. С помощью идентификатора Microsoft Entra можно использовать управление доступом на основе ролей 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
    

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

    Поле Description
    spring.jms.servicebus.namespace Укажите пространство имен, полученное в экземпляре службы служебная шина из портал Azure.
    spring.jms.servicebus.pricing-tier Выберите ценовую категорию для служебной шины. Поддерживаемые значения : "Премиум" и "Стандартный". Уровень "Премиум" использует службу сообщений 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 Apps

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

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