Использование Службы "Сетка событий Azure" в Spring
В этой статье показано, как использовать Azure Event Grid для отправки события в тему и как использовать очередь Service Bus в качестве обработчика событий для получения в приложении Spring Boot.
Служба Azure Event Grid — это высокомасштабируемая полностью управляемая служба распределения сообщений Pub/Sub, которая предлагает гибкие схемы потребления сообщений с использованием протоколов MQTT и HTTP.
Необходимые условия
Подписка на Azure: создайте её бесплатно.
пакет средств разработки Java (JDK) версия 8 или выше.
Apache Mavenверсии 3.0 или более поздней.
Экземпляр темы сетки событий. Если у вас его нет, см. статью Создание пользовательского раздела или домена в службе "Сетка событий Azure".
Экземпляр очереди в шине обслуживания. Если у вас его нет, см. статью Создание очереди на портале Azure.
Приложение Spring Boot. Если у вас ещё нет Maven проекта, создайте его с помощью Spring Initializr. Обязательно выберите Maven Project и выберите Java версии 8 или более поздней.
Подписка на настраиваемую тему
Выполните следующие действия, чтобы создать подписку на события, чтобы сообщить сетке событий отправлять события в очередь служебной шины:
- На портале Azure перейдите к экземпляру раздела сетки событий.
- Выберите Подписки на события на панели инструментов.
- На странице создания подписки на события введите значение имени для подписки на события.
- Для типа конечной точкивыберите очередь служебной шины.
- Выберите Выберите конечную точку, а затем выберите созданный ранее экземпляр очереди служебной шины.
Отправить событие через Azure Event Grid и получить его через очередь Azure Service Bus
С помощью ресурса Azure Event Grid можно отправить событие с использованием Spring Cloud Azure Event Grid. С помощью ресурса очереди Azure Service Bus в качестве обработчика событий, можно использовать Spring Cloud Azure Stream Binder для Service Bus для получения события.
Чтобы установить начальный модуль для сетки событий Spring Cloud Azure и модуль шины служб Spring Cloud Azure Stream Binder, добавьте следующие зависимости в файл pom.xml.
Составная спецификация Spring Cloud Azure (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 следует использовать.Начальный артефакт Сетки событий Azure Spring Cloud:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-eventgrid</artifactId> </dependency>
Артефакт служебной шины Azure Stream Binder Spring Cloud:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
Код приложения
Выполните следующие действия, чтобы настроить приложение для отправки события с помощью сетки событий и получения с помощью очереди служебной шины.
Настройте учетные данные службы "Сетка событий Azure" и служебной шины в файле конфигурации application.yaml, как показано в следующем примере:
spring: cloud: azure: eventgrid: endpoint: ${AZURE_EVENTGRID_ENDPOINT} key: ${AZURE_EVENTGRID_KEY} servicebus: connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING} function: definition: consume stream: bindings: consume-in-0: destination: ${AZURE_SERVICEBUS_QUEUE_NAME} servicebus: bindings: consume-in-0: consumer: auto-complete: false
Измените файл класса запуска, чтобы отобразить следующее содержимое. Этот код создает завершения.
import com.azure.core.util.BinaryData; import com.azure.messaging.eventgrid.EventGridEvent; import com.azure.messaging.eventgrid.EventGridPublisherClient; 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.context.annotation.Bean; import org.springframework.messaging.Message; import java.util.List; import java.util.function.Consumer; @SpringBootApplication public class EventGridSampleApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventGridSampleApplication.class); @Autowired EventGridPublisherClient<EventGridEvent> client; public static void main(String[] args) { SpringApplication.run(EventGridSampleApplication.class, args); } @Bean public Consumer<Message<String>> consume() { return message -> { List<EventGridEvent> eventData = EventGridEvent.fromString(message.getPayload()); eventData.forEach(event -> { LOGGER.info("New event received: '{}'", event.getData()); }); }; } @Override public void run(String... args) throws Exception { String str = "FirstName: John, LastName: James"; EventGridEvent event = new EventGridEvent("A user is created", "User.Created.Text", BinaryData.fromObject(str), "0.1"); client.sendEvent(event); LOGGER.info("New event published: '{}'", event.getData()); } }
Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:
New event published: '"FirstName: John, LastName: James"' ... New event received: '"FirstName: John, LastName: James"'
Развертывание в 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.
Дальнейшие действия
Чтобы узнать больше о Spring и Azure, перейдите в центр документации Spring в Azure.