Spring Cloud Azure-támogatás a Spring Messaging Azure Service Bushoz

Ez a cikk azt ismerteti, hogyan használható a Spring Cloud Azure és a Spring Messaging Azure Service Bus. 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 Service Bus

Főbb fogalmak

Az Azure Service Bus egy teljes körűen felügyelt vállalati üzenetközvetítő üzenetsorokkal és közzétételi feliratkozási témakörökkel. Az Azure Service Bus-hoz készült Spring Messaging projekt alapvető Spring-fogalmakat alkalmaz a Service Bus-alapú üzenetkezelési megoldások fejlesztésére. Az üzenetküldés magas szintű absztrakciójaként egy sablont biztosít. Emellett támogatja az üzenetvezérelt POJ-kat @ServiceBusListener széljegyzetekkel és egy figyelőtárolóval. 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-servicebus</artifactId>
</dependency>

Konfiguráció

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

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 a Service Bus üzenetkonverteréhez. Alapértelmezés szerint engedélyezve van.
spring.cloud.azure.servicebus.enabled Boolean Az Azure Service Bus engedélyezése.
spring.cloud.azure.servicebus.connection-string Lánc A Service Bus-névtér kapcsolati karakterláncának értéke.
spring.cloud.azure.servicebus.custom-endpoint-address Lánc A Service Bushoz való csatlakozáskor használandó egyéni végpontcím.
spring.cloud.azure.servicebus.namespace Lánc A Service Bus névtér értéke, amely az FQDN előtagja. Az FQDN-nek a NamespaceName.DomainName elemekből kell állnia
spring.cloud.azure.servicebus.entity-type Lánc Az Azure Service Bus entitástípusa.

Alapszintű használat

Custom Service Bus üzenetkonverter

A Service Bus üzenetkonverter kétféleképpen konfigurálható:

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

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definiálja közvetlenül a Service Bus üzenetkonverter bean-t:

    @Bean
    AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() {
        JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build();
        return new ServiceBusMessageConverter(jsonMapper);
    }
    

Üzenetek küldése az Azure Service Busba

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:
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • 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:
            servicebus:
              connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • 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}
            profile:
              tenant-id: <tenant>
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      

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.

  • 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>
          servicebus:
            namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
            entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
    

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. ServiceBusTemplate 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 ServiceBusTemplate serviceBusTemplate;
    
        public MyBean(ServiceBusTemplate serviceBusTemplate) {
            this.serviceBusTemplate = serviceBusTemplate;
        }
    
        public void someMethod() {
            this.serviceBusTemplate.sendAsync('QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    
    }
    

Üzenetek fogadása az Azure Service Busbó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, amely elindítja a @ServiceBusListenerjegyzetekkel 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. Amikor a ServiceBus-infrastruktúra elérhető, bármely bean-t elláthatja a(z) @ServiceBusListener annotációval egy figyelővégpont létrehozásához. A következő összetevő létrehoz egy figyelővégpontot a QUEUE_NAME üzenetsoron:

    @Component
    public class MyBean {
    
        @ServiceBusListener(destination = "QUEUE_NAME")
        public void processMessage(String content) {
            // ...
        }
    
    }
    

A Service Bus-ügyfél tulajdonságainak testreszabása

A fejlesztők a AzureServiceClientBuilderCustomizer segítségével testre szabhatják a Service Bus-ügyfél tulajdonságait. Az alábbi példa a sessionIdleTimeoutServiceBusClientBuilder tulajdonságát szabja testre:

@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
    return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}

Minták

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