Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как использовать очередь служба хранилища Azure в приложениях Java, созданных с помощью платформы Spring Framework.
Очередь служба хранилища Azure реализует облачную очередь для обеспечения связи между компонентами распределенного приложения. Каждая очередь поддерживает список сообщений, которые могут быть добавлены компонентом отправителя и обработаны компонентом получателя. Очередь позволяет мгновенно масштабировать приложение для удовлетворения спроса.
Spring Cloud Azure предоставляет различные модули для использования фреймворков Spring для отправки сообщений в очереди служба хранилища Azure и получения сообщений из них. Эти модули можно использовать независимо или объединить их для разных вариантов использования, как описано в следующем списке:
Spring Cloud служба хранилища Azure Queue Starter позволяет отправлять и получать сообщения с помощью клиентской библиотеки Java SDK для очередей хранилища, используя возможности Spring Boot.
Spring Messaging служба хранилища Azure queue позволяет взаимодействовать с очередями хранилища через API Spring Messaging.
Spring Integration служба хранилища Azure Queue позволяет подключать каналы Spring Integration Message Channel с очередями хранилища.
Предварительные условия
Подписка Azure — создайте бесплатно.
Java набор для разработки (JDK), версия 8 или новее.
Учетная запись служба хранилища Azure и очереди Azure. Если у вас нет этих ресурсов, сначала создайте учетную запись хранения, а затем создайте очередь. Для получения дополнительной информации см. разделы Создание учетной записи хранения и Создание очереди в разделе Краткое руководство: Создание очереди и добавление сообщения на портале Azure.
Приложение Spring Boot. Если у вас его нет, создайте проект Maven, используя Spring Initializr. Обязательно выберите Maven Project и в разделе Dependencies добавьте Spring Web зависимость и выберите Java версии 8 или более поздней.
Примечание.
Чтобы предоставить вашей учетной записи доступ к ресурсам, в вновь созданной учетной записи служба хранилища Azure назначьте роль Storage Queue Data Contributor учетной записи Microsoft Entra, которую вы используете. Для получения дополнительной информации см. в разделе Назначение ролей 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?
Использование Spring Cloud Starter для служба хранилища Azure Queue
Модуль Starter Spring Cloud служба хранилища Azure Queue импортирует клиентскую библиотеку служба хранилища Azure Queue для Java для платформы Spring Boot. Вы можете использовать Spring Cloud Azure и Azure SDK вместе в совмещаемом режиме. Таким образом, вы можете продолжать использовать api очереди хранилища Java клиента в приложении Spring.
Добавление зависимостей
Чтобы установить модуль Spring Cloud служба хранилища Azure Queue Starter, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.3.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.4.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-storage-queue</artifactId> </dependency>
Код приложения для отправки и получения сообщений
В этом разделе показано, как использовать клиенты Хранилище очередей Azure в контексте приложения Spring. У вас есть следующие два варианта:
- Используйте автоматическую настройку Spring Boot и используйте встроенные клиенты из контекста Spring (рекомендуется).
- Создайте клиент программным способом.
При автоматической настройке производится автосвязывание клиентских бинов из контейнера инверсии управления Spring (IoC). Этот подход обеспечивает более гибкий и эффективный опыт при работе с клиентами Storage Queue. Автонастройка имеет следующие преимущества:
Автонастройка использует внешнюю конфигурацию , чтобы работать с одинаковым кодом приложения в разных средах.
Вы можете делегировать фреймворку Spring Boot процесс освоения шаблона проектирования 'строитель' и регистрации клиентов в контексте приложения. Вы сосредоточены только на том, как использовать клиентов с собственными бизнес-требованиями.
Индикатор работоспособности можно использовать для проверки состояния и работоспособности приложения и внутренних компонентов.
Примеры кода в следующих разделах показывают, как использовать QueueClient с двумя описанными вариантами.
Совет
пакет SDK Azure Java для очереди хранилища предоставляет несколько клиентов для взаимодействия с очередью хранилища. Стартер также обеспечивает автоматическую настройку для всех клиентов очереди хранилища и билдера клиентов. Эта статья использует только QueueClient в качестве примера.
Использование автоматической настройки Spring Boot
Чтобы отправлять сообщения и получать сообщения из очередей служба хранилища Azure, выполните следующие действия, чтобы настроить приложение:
Настройте имя учетной записи хранения и имя очереди, как показано в следующем примере:
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name> spring.cloud.azure.storage.queue.queue-name=<your-storage-queue-name>Вставьте
QueueClientв ваше Spring-приложение и вызовите соответствующие API для отправки сообщений, как показано в следующем примере:import com.azure.storage.queue.QueueClient; import com.azure.storage.queue.models.QueueMessageItem; import com.azure.storage.queue.models.SendMessageResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StorageQueueClientApplication implements CommandLineRunner { private final static Logger logger = LoggerFactory.getLogger(StorageQueueClientApplication.class); @Autowired private QueueClient queueClient; public static void main(String[] args) { SpringApplication.run(StorageQueueClientApplication.class, args); } @Override public void run(String... args) { // Using the QueueClient object, call the create method to create the queue in your storage account. queueClient.create(); SendMessageResult sendMessageResult = queueClient.sendMessage("Hello world"); logger.info("Send message id: {}", sendMessageResult.getMessageId()); QueueMessageItem queueMessageItem = queueClient.receiveMessage(); logger.info("Received message: {}", new String(queueMessageItem.getBody().toBytes())); } }Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:
Send message id: ... Received message: Hello world
Создание клиента программным способом
Вы можете создать клиентские компоненты самостоятельно, но процесс сложный. В приложениях Spring Boot необходимо управлять свойствами, изучать шаблон построителя и регистрировать клиенты в контексте приложения Spring. Ниже показано, как это сделать.
Создайте клиент программным способом в приложении Spring, как показано в следующем примере. Обязательно замените
<storage-account-name>заполнитель собственным значением.import com.azure.identity.DefaultAzureCredentialBuilder; import com.azure.storage.queue.QueueClient; import com.azure.storage.queue.QueueClientBuilder; import com.azure.storage.queue.models.QueueMessageItem; import com.azure.storage.queue.models.SendMessageResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StorageQueueClientApplication implements CommandLineRunner { private final static String queueName = "test-queue"; private final static String endpoint = "https://<storage-account-name>.queue.core.windows.net/"; private final static Logger logger = LoggerFactory.getLogger(StorageQueueClientApplication.class); QueueClient queueClient = new QueueClientBuilder() .endpoint(endpoint) .queueName(queueName) .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); public static void main(String[] args) { SpringApplication.run(StorageQueueClientApplication.class, args); } @Override public void run(String... args) { // Using the QueueClient object, call the create method to create the queue in your storage account. queueClient.create(); SendMessageResult sendMessageResult = queueClient.sendMessage("Hello world"); logger.info("Send message id: {}", sendMessageResult.getMessageId()); QueueMessageItem queueMessageItem = queueClient.receiveMessage(); logger.info("Received message: {}", new String(queueMessageItem.getBody().toBytes())); } }Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:
Send message id: ... Received message: Hello world
В следующем списке показаны причины, по которым этот код не является гибким или изящным:
- Названия учетной записи хранения и очередей жёстко закодированы.
- Если вы используете
@Valueдля получения конфигураций из среды Spring, в файле application.properties невозможно указать IDE. - Если у вас есть среда микросервисов, необходимо дублировать код в каждом проекте, и легко допустить ошибки, а также сложно поддерживать согласованность.
К счастью, с Spring Cloud Azure не требуется самостоятельно создавать клиентские бины. Вместо этого можно напрямую внедрить их и использовать свойства конфигурации, с которыми вы уже знакомы для настройки очереди хранилища. Для получения дополнительной информации см. в разделе свойства конфигурации Spring Cloud Azure.
Spring Cloud Azure также предоставляет следующие глобальные конфигурации для различных сценариев. Для получения дополнительной информации см. глобальные свойства конфигурации Spring Cloud Azure.
- Параметры прокси-сервера.
- Варианты повтора.
Вы также можете подключиться к разным Azure облакам. Для получения дополнительной информации см. раздел Подключение к различным облакам Azure.
Использование очереди служба хранилища Azure Spring Messaging
Модуль Spring Messaging служба хранилища Azure Queue предоставляет поддержку платформы Spring Messaging с Хранилище очередей Azure.
Если вы используете Spring Messaging служба хранилища Azure очередь сообщений, вы можете использовать функцию StorageQueueTemplate для асинхронной и синхронной отправки сообщений в очереди хранилища.
В следующих разделах показано, как использовать 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.3.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.3.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.4.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 и Spring Messaging:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-messaging-azure-storage-queue</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Чтобы настроить и закодировать приложение, выполните следующие действия.
Настройте имя учетной записи служба хранилища Azure для очередей хранилища, как показано в следующем примере:
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name>Подключите отправителя и получателя для отправки и получения сообщений с помощью Spring, как показано в следующем примере. Обязательно замените
<storage-queue-name>заполнитель собственным значением.import com.azure.spring.messaging.AzureHeaders; import com.azure.spring.messaging.checkpoint.Checkpointer; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import java.time.Duration; @SpringBootApplication public class StorageQueueMessagingApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(StorageQueueMessagingApplication.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; @Autowired StorageQueueTemplate storageQueueTemplate; public static void main(String[] args) { SpringApplication.run(StorageQueueMessagingApplication.class, args); } @Override public void run(String... args) { storageQueueTemplate .sendAsync(STORAGE_QUEUE_NAME, MessageBuilder.withPayload("Hello world").build()) .subscribe(); LOGGER.info("Message was sent successfully."); Message<?> message = storageQueueTemplate.receiveAsync(STORAGE_QUEUE_NAME, Duration.ofSeconds(30)).block(); LOGGER.info("Received message: {}", new String((byte[]) message.getPayload())); } }Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:
Message was sent successfully. ... Received message: Hello World
Использование очереди хранилища Azure в интеграции Spring
Модуль Spring Integration служба хранилища Azure Queue предоставляет поддержку для фреймворка Spring Integration с использованием очередей хранилища.
Если приложение Spring использует каналы сообщений Spring Integration, вы можете направлять сообщения между каналами сообщений и очередью хранилища с помощью адаптеров каналов. Адаптер входящего канала пересылает сообщения из очереди хранилища в канал сообщений. Адаптер канала исходящих сообщений публикует сообщения из канала сообщений в очередь для хранения.
В следующих разделах показано, как использовать очередь Spring Integration служба хранилища Azure для отправки и получения сообщений в очереди хранилища и из нее.
Добавление зависимостей
Чтобы установить модуль очереди Spring Integration служба хранилища Azure, добавьте следующие зависимости в файл pom.xml:
Акт технических спецификаций Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.3.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.4.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 с очередью служба хранилища Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-integration-storage-queue</artifactId> </dependency>
Код приложения для отправки и получения сообщений
Чтобы настроить и закодировать приложение, выполните следующие действия.
Настройте имя учетной записи служба хранилища Azure для ваших очередей хранения.
spring.cloud.azure.storage.queue.account-name=<your-storage-account-name>Создайте класс
QueueReceiveConfigurationJava, как показано в следующем примере. Этот класс используется для определения приемника сообщений. Обязательно замените<storage-queue-name>заполнитель собственным значением.import com.azure.spring.integration.storage.queue.inbound.StorageQueueMessageSource; import com.azure.spring.messaging.AzureHeaders; import com.azure.spring.messaging.checkpoint.Checkpointer; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.InboundChannelAdapter; import org.springframework.integration.annotation.Poller; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.handler.annotation.Header; @Configuration public class QueueReceiveConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(QueueReceiveConfiguration.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; private static final String INPUT_CHANNEL = "input"; @Bean @InboundChannelAdapter(channel = INPUT_CHANNEL, poller = @Poller(fixedDelay = "1000")) public StorageQueueMessageSource storageQueueMessageSource(StorageQueueTemplate storageQueueTemplate) { return new StorageQueueMessageSource(STORAGE_QUEUE_NAME, storageQueueTemplate); } @ServiceActivator(inputChannel = INPUT_CHANNEL) public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) { String message = new String(payload); LOGGER.info("Received message: {}", message); } }Создайте класс
QueueSendConfigurationJava, как показано в следующем примере. Этот класс используется для определения отправителя сообщения. Обязательно замените<storage-queue-name>заполнитель собственным значением.import com.azure.spring.integration.core.handler.DefaultMessageHandler; import com.azure.spring.messaging.storage.queue.core.StorageQueueTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.MessagingGateway; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.MessageHandler; import org.springframework.util.concurrent.ListenableFutureCallback; @Configuration public class QueueSendConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(QueueSendConfiguration.class); private static final String STORAGE_QUEUE_NAME = "<storage-queue-name>"; private static final String OUTPUT_CHANNEL = "output"; @Bean @ServiceActivator(inputChannel = OUTPUT_CHANNEL) public MessageHandler messageSender(StorageQueueTemplate storageQueueTemplate) { DefaultMessageHandler handler = new DefaultMessageHandler(STORAGE_QUEUE_NAME, storageQueueTemplate); handler.setSendCallback(new ListenableFutureCallback<Void>() { @Override public void onSuccess(Void result) { LOGGER.info("Message was sent successfully."); } @Override public void onFailure(Throwable ex) { LOGGER.info("There was an error sending the message."); } }); return handler; } @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL) public interface StorageQueueOutboundGateway { void send(String text); } }Подключите отправителя и получателя, чтобы отправлять и получать сообщения с использованием Spring.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Configuration; import org.springframework.integration.config.EnableIntegration; @SpringBootApplication @EnableIntegration @Configuration(proxyBeanMethods = false) public class StorageQueueIntegrationApplication { public static void main(String[] args) { ConfigurableApplicationContext applicationContext = SpringApplication.run(StorageQueueIntegrationApplication.class, args); QueueSendConfiguration.StorageQueueOutboundGateway storageQueueOutboundGateway = applicationContext.getBeanQueueSendConfiguration.StorageQueueOutboundGateway.class); storageQueueOutboundGateway.send("Hello World"); } }Совет
Не забудьте добавить аннотацию
@EnableIntegration, которая включает инфраструктуру Spring Integration.Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:
Message was sent successfully. Received message: 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?