Использование 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, а на вкладке "Строка подключения" отображается проверка подлинности SAS.
Проверка подлинности Microsoft Entra — это механизм подключения к Служебная шина Azure JMS с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службы Майкрософт в центральном расположении, что упрощает управление разрешениями.
Проверка подлинности SAS использует строка подключения пространства имен Служебная шина Azure для делегированного доступа к служебная шина JMS. Если вы решили использовать подписанные URL-адреса в качестве учетных данных, вам нужно самостоятельно управлять строка подключения.
Необходимые компоненты
Подписка Azure — создайте бесплатную учетную запись.
Пакет средств разработки Java (JDK) версии 8 или более поздней.
Apache Maven версии 3.2 или более поздней.
Очередь или раздел для Служебная шина Azure. Если у вас его нет, см. статью "Использовать портал Azure для создания пространства имен служебная шина и очереди" или "Использовать портал Azure" для создания раздела и подписок служебная шина в этом разделе.
Приложение Spring Boot. Если у вас его нет, создайте проект Maven с помощью Spring Initializr. Обязательно выберите проект Maven и в разделе "Зависимости" добавьте зависимость Spring Web , а затем выберите Java версии 8 или более поздней.
Внимание
Для выполнения действий, описанных в этом руководстве, требуется 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.19.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете Spring Boot 2.x, обязательно установите для нее
spring-cloud-azure-dependencies
значение4.19.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>
Добавление кода приложения
Чтобы настроить приложение для отправки и получения сообщений, используйте очередь или раздел служебная шина.
Настройте учетные данные служебная шина, добавив следующие свойства в файл 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 Добавьте
@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.
Запустите приложение. Вы должны увидеть
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".