Udostępnij za pośrednictwem


Używanie Azure Event Grid na platformie Spring

W tym artykule pokazano, jak używać Azure Event Grid do wysyłania zdarzenia do topicu oraz jak korzystać z kolejki Service Bus jako Event Handler do odbierania zdarzeń w aplikacji Spring Boot.

Usługa Azure Event Grid to wysoce skalowalna, w pełni zarządzana usługa dystrybucji komunikatów Pub Sub, która oferuje elastyczne wzorce zużycia komunikatów przy użyciu protokołów MQTT i HTTP.

Warunki wstępne

Subskrybowanie tematu niestandardowego

Wykonaj następujące kroki, aby utworzyć subskrypcję zdarzeń, aby poinformować usługę Event Grid o wysyłaniu zdarzeń do kolejki Service Bus:

  1. W portalu Azure przejdź do wystąpienia tematu usługi Event Grid.
  2. Wybierz opcję Subskrypcje zdarzeń na pasku narzędzi.
  3. Na stronie Tworzenie subskrypcji zdarzeńwprowadź wartość nazwy dla subskrypcji zdarzeń.
  4. Dla Typ punktu końcowego wybierz Service Bus Queue.
  5. Wybierz Select an endpoint, a następnie wybierz utworzone wcześniej wystąpienie Service Bus Queue.

Wysyłanie zdarzenia przez Azure Event Grid i odbieranie przez kolejkę Azure Service Bus

Za pomocą zasobu Azure Event Grid możesz wysłać zdarzenie przy użyciu usługi Spring Cloud Azure Event Grid. Zasób kolejki Azure Service Bus jako program obsługi zdarzeń umożliwia odbieranie zdarzenia przy użyciu narzędzia Spring Cloud Azure Stream Binder dla Service Bus.

Aby zainstalować moduł Spring Cloud Azure Event Grid Starter i moduł Spring Cloud Azure Stream Binder Service Bus, dodaj następujące zależności do pliku pom.xml:

  • Projekt Spring Cloud Azure Bill of Materials (BOM):

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

    Notatka

    Jeśli używasz platformy Spring Boot 4.0.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 7.1.0.

    Jeśli używasz platformy Spring Boot 3.5.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 6.1.0.

    Jeśli używasz platformy Spring Boot 3.1.x-3.5.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 5.25.0.

    Jeśli używasz środowiska Spring Boot 2.x, ustaw wersję spring-cloud-azure-dependencies na 4.20.0.

    Tę listę materiałów (BOM) należy skonfigurować w sekcji <dependencyManagement> pliku pom.xml. Dzięki temu wszystkie zależności usługi Spring Cloud Azure korzystają z tej samej wersji.

    Aby uzyskać więcej informacji na temat wersji używanej dla tego modelu BOM, zobacz Jakiej wersji Spring Cloud Azure powinienem użyć.

  • Artefakt startowy Spring Cloud Azure Event Grid:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-eventgrid</artifactId>
    </dependency>
    
  • Artefakt kolektora strumienia Spring Cloud Azure dla Service Bus:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
    </dependency>
    

Kod aplikacji

Wykonaj poniższe kroki, aby skonfigurować aplikację do wysyłania zdarzenia przy użyciu usługi Event Grid i odbierania przy użyciu usługi Service Bus Queue.

  1. Skonfiguruj poświadczenia Azure Event Grid i Service Bus w pliku konfiguracji application.yaml jak pokazano w poniższym przykładzie:

    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
    

    Notatka

    Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.

  2. Edytuj plik klasy uruchamiania, aby wyświetlić następującą zawartość. Ten kod generuje uzupełnienia.

    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. Uruchom aplikację. Po uruchomieniu aplikacja generuje dzienniki podobne do następującego przykładu:

    New event published: '"FirstName: John, LastName: James"'
    ...
    New event received: '"FirstName: John, LastName: James"'
    

Wdróż do Azure Spring Apps

Teraz, gdy aplikacja Spring Boot działa lokalnie, nadszedł czas, aby przenieść ją do środowiska produkcyjnego. Azure Spring Apps ułatwia wdrażanie aplikacji Spring Boot w Azure bez żadnych zmian w kodzie. Usługa zarządza infrastrukturą aplikacji Spring, aby deweloperzy mogli skupić się na swoim kodzie. Azure Spring Apps zapewnia zarządzanie cyklem życia przy użyciu kompleksowego monitorowania i diagnostyki, zarządzania konfiguracją, odnajdywania usług, integracji CI/CD, wdrożeń blue-green oraz innych funkcji. Aby wdrożyć swoją pierwszą aplikację do Azure Spring Apps, zobacz Wdrażanie pierwszej aplikacji do Azure Spring Apps.

Następne kroki

Aby dowiedzieć się więcej na temat platformy Spring i Azure, przejdź do centrum dokumentacji Spring w Azure.