Spring Cloud Azure-támogatás a Spring Messaging Azure Event Hubshoz

Ez a cikk azt ismerteti, hogyan használhatja a Spring Cloud Azure-t és a Spring Messaging Azure Event Hubsot. A Spring Framework széles körű támogatást nyújt az üzenetkezelési rendszerekkel való integrációhoz.

Spring üzenetküldés Azure Event Hubs

Főbb fogalmak

Az Azure Event Hubs egy natív adatstreamelési szolgáltatás a felhőben, amely másodpercenként több millió eseményt képes streamelni, alacsony késéssel, bármilyen forrásból bármilyen célhelyre. Az Azure Event Hubs Spring Messaging projektje az alapvető Spring-fogalmakat alkalmazza az event hubs-alapú üzenetkezelési megoldások fejlesztésére. Az üzenetküldés magas szintű absztrakciójaként egy sablont biztosít. Emellett támogatást nyújt az üzenetvezérelt egyszerű régi Java-objektumokhoz (POJO-khoz) @EventHubsListener annotációkkal és egy figyelőkonténerrel. Ezek a kódtárak elősegítik a függőséginjektálás és a deklaratív konfiguráció használatát. Ezekben az esetekben hasonlóságok láthatók a Spring Framework JMS-támogatásához és a Spring AMQP RabbitMQ-támogatásához.

Függőségek beállítása

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-messaging-azure-eventhubs</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>

Konfiguráció

A kódtár a következő konfigurációs beállításokat biztosítja EventHubsTemplate és @EventHubsListener:

Ingatlan Típus Leírás
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Azt jelzi, hogy egy izolált ObjectMapper-babot használnak-e az Event Hubs üzenetkonverteréhez. Alapértelmezés szerint engedélyezve van.
spring.cloud.azure.eventhubs.enabled Boolean Az Azure Event Hubs engedélyezése.
spring.cloud.azure.eventhubs.connection-string Lánc Az Event Hubs-névtér kapcsolati karakterláncának értéke.
spring.cloud.azure.eventhubs.namespace Lánc Az Event Hubs névtér értéke, amely az FQDN előtagja. Az FQDN-nek a NamespaceName.DomainName elemekből kell állnia
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name Lánc A tárfiók neve.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key Lánc Tárfiók hozzáférési kulcsa.
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name Lánc Tárolókonténer neve.

Alapszintű használat

Egyéni Event Hubs üzenet-átalakító

Az Event Hubs üzenetkonverter kétféleképpen konfigurálható:

  • Konfigurálja a következő tulajdonságot úgy, hogy az alapértelmezett Event Hubs üzenetkonverter egy ObjectMapper beant használjon, amely lehet az egyéni ObjectMapper beanje vagy a Spring Boot által felügyelt bean:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Adja meg közvetlenül az Event Hubs üzenetkonverterét:

    @Bean
    AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new EventHubsMessageConverter(jsonMapper);
    }
    

Üzenetek küldése az Azure Event Hubsba

A következő lépésekkel küldhet üzeneteket:

  1. Adja meg a hitelesítő adatok konfigurációs beállításait az alábbi módszerek egyikével:

    • Hitelesítő adatok DefaultAzureCredentialesetén konfigurálja a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
      
    • A hitelesítő adatok kapcsolati sztringként való megadásához konfigurálja a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            eventhubs:
              connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING}
              processor:
                checkpoint-store:
                  container-name: ${CHECKPOINT-CONTAINER}
                  account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
                  account-key: ${CHECKPOINT-ACCESS-KEY}
      
    • A hitelesítő adatok felügyelt identitásként való megadásához konfigurálja a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            credential:
              managed-identity-enabled: true
              client-id: ${AZURE_CLIENT_ID}
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      
    • A szolgáltatásnév-azonosítóként használt hitelesítő adatokhoz állítsa be a következő tulajdonságokat a application.yml fájlban:

      spring:
        cloud:
          azure:
            credential:
              client-id: ${AZURE_CLIENT_ID}
              client-secret: ${AZURE_CLIENT_SECRET}
            profile:
              tenant-id: <tenant>
            eventhubs:
              namespace: ${AZURE_EVENT_HUBS_NAMESPACE}
              processor:
                checkpoint-store:
                  container-name: ${CONTAINER_NAME}
                  account-name: ${ACCOUNT_NAME}
      

Megjegyzés:

A következő értékek engedélyezettek tenant-id: common, organizations, consumersvagy bérlőazonosító. Ezekről az értékekről további információt a Helytelen végpont (személyes és szervezeti fiókok) szakaszában talál, amely az AADSTS50020 - Az identitásszolgáltatótól származó felhasználói fiók nem létezik a bérlőben hiba részét képezi. Az egybérlős alkalmazás konvertálásáról további információért lásd: Az egybérlős alkalmazás átalakítása több-bérlőssé a Microsoft Entra ID rendszeren.

  1. EventHubsTemplate automatikusan konfigurálva van, és közvetlenül a saját babjába is beviheti, ahogy az alábbi példában látható:

    @Component
    public class MyBean {
    
        private final EventHubsTemplate eventHubsTemplate;
    
        public MyBean(EventHubsTemplate eventHubsTemplate) {
            this.eventHubsTemplate = eventHubsTemplate;
        }
    
        public void someMethod() {
            this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
    }
    

Üzenetek fogadása az Azure Event Hubsból

Az üzenetek fogadásához kövesse az alábbi lépéseket:

  1. Adja meg a hitelesítő adatok konfigurációs beállításait.

  2. Adja hozzá a @EnableAzureMessaging megjegyzést az alábbi példában látható módon. Ez a megjegyzés elindítja a @EventHubsListenerjegyzetekkel ellátott metódusok felderítését, és létrehozza az üzenetfigyelő tárolót a borítók alatt.

    @SpringBootApplication
    @EnableAzureMessaging
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    Megjegyzés:

    Az ismétlés elkerülése érdekében a Spring Cloud Azure Auto-configure a 5.21.0 verziótól kezdve automatikusan engedélyezte a @EnableAzureMessaging annotációt.

  3. Ha az Event Hubs-infrastruktúra rendelkezésre áll, bármely beant elláthatja a(z) @EventHubsListener annotációval egy figyelővégpont létrehozásához. A következő összetevő létrehoz egy figyelővégpontot az EVENT_HUB_NAME eseményközpontban és a $Default fogyasztói csoportban:

    @Component
    public class MyBean {
    
        @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

Minták

További információt a azure-spring-boot-samples GitHub adattárában talál.