Поделиться через


Использование Службы "Сетка событий Azure" в Spring

В этой статье показано, как использовать Azure Event Grid для отправки события в тему и как использовать очередь Service Bus в качестве обработчика событий для получения в приложении Spring Boot.

Служба Azure Event Grid — это высокомасштабируемая полностью управляемая служба распределения сообщений Pub/Sub, которая предлагает гибкие схемы потребления сообщений с использованием протоколов MQTT и HTTP.

Необходимые условия

Подписка на настраиваемую тему

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

  1. На портале Azure перейдите к экземпляру раздела сетки событий.
  2. Выберите Подписки на события на панели инструментов.
  3. На странице создания подписки на события введите значение имени для подписки на события.
  4. Для типа конечной точкивыберите очередь служебной шины.
  5. Выберите Выберите конечную точку, а затем выберите созданный ранее экземпляр очереди служебной шины.

Отправить событие через 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>
    

Код приложения

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

  1. Настройте учетные данные службы "Сетка событий 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
    
  2. Измените файл класса запуска, чтобы отобразить следующее содержимое. Этот код создает завершения.

    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());
        }
    }
    
    
  3. Запустите приложение. После запуска приложение создает журналы, аналогичные следующему примеру:

    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.