Obsługa Azure Service Bus dla Spring Messaging w Spring Cloud Azure

W tym artykule opisano, jak używać Spring Cloud Azure i Spring Messaging Azure Service Bus. Platforma Spring Framework zapewnia rozbudowaną obsługę integracji z systemami obsługi komunikatów.

Spring Messaging usługa Azure Service Bus

Najważniejsze pojęcia

Usługa Azure Service Bus to w pełni zarządzany broker komunikatów dla przedsiębiorstw z kolejkami komunikatów i tematami typu publikacja-subskrypcja. Projekt Spring Messaging for Azure Service Bus stosuje podstawowe pojęcia dotyczące platformy Spring do opracowywania rozwiązań do obsługi komunikatów opartych na magistrali usług. Udostępnia szablon jako abstrakcję wysokiego poziomu do wysyłania komunikatów. Zapewnia również obsługę obiektów POJO sterowanych komunikatami z adnotacjami @ServiceBusListener i kontenerem nasłuchującym. Te biblioteki promują użycie wstrzykiwania zależności i konfiguracji deklaratywnej. We wszystkich tych sytuacjach można dostrzec podobieństwa do obsługi JMS w Spring Framework oraz obsługi RabbitMQ w Spring AMQP.

Konfiguracja zależności

<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>

Konfiguracja

Biblioteka udostępnia następujące opcje konfiguracji dla ServiceBusTemplate i @ServiceBusListener:

Majątek Typ Opis
spring.cloud.azure.message-converter.isolated-object-mapper typ logiczny (boolowski) Czy izolowany bean ObjectMapper jest używany przez konwerter komunikatów Service Bus. Włączone domyślnie.
spring.cloud.azure.servicebus.enabled typ logiczny (boolowski) Określa, czy usługa Azure Service Bus jest włączona.
spring.cloud.azure.servicebus.connection-string Sznurek Wartość parametrów połączenia przestrzeni nazw usługi Service Bus.
spring.cloud.azure.servicebus.custom-endpoint-address Sznurek Niestandardowy adres punktu końcowego do użycia podczas nawiązywania połączenia z usługą Service Bus.
spring.cloud.azure.servicebus.namespace Sznurek Wartość przestrzeni nazw usługi Service Bus, która jest prefiksem nazwy FQDN. FQDN powinien mieć postać NamespaceName.DomainName
spring.cloud.azure.servicebus.entity-type Sznurek Typ jednostki usługi Azure Service Bus.

Podstawowy sposób użycia

Niestandardowy konwerter komunikatów usługi Service Bus

Istnieją dwa sposoby konfigurowania konwertera komunikatów usługi Service Bus:

  • Skonfiguruj następującą właściwość, aby domyślny konwerter komunikatów Service Bus używał beana ObjectMapper, który może być Twoim niestandardowym beanem ObjectMapper lub beanem zarządzanym przez Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Zdefiniuj bezpośrednio fasolę konwertera komunikatów usługi Service Bus:

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

Wysyłanie komunikatów do usługi Azure Service Bus

Aby wysyłać komunikaty, wykonaj następujące czynności:

  1. Wypełnij opcje konfiguracji poświadczeń przy użyciu jednej z następujących metod:

    • Aby skonfigurować poświadczenia jako DefaultAzureCredential, skonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • Jeśli poświadczenia są podawane jako parametry połączenia, skonfiguruj następujące właściwości w pliku application.yml:

      spring:
        cloud:
          azure:
            servicebus:
              connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • W przypadku poświadczeń jako tożsamości zarządzanych skonfiguruj następujące właściwości w pliku application.yml:

      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}
      

Uwaga

Następujące wartości są dozwolone dla tenant-id: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto nieprawidłowego punktu końcowego (kont osobistych i organizacji) sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje wdzierżawy. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Convert single-tenant app to multitenant on Microsoft Entra ID.

  • W przypadku poświadczeń jednostki usługi skonfiguruj następujące właściwości w pliku application.yml:

    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}
    

Uwaga

Następujące wartości są dozwolone dla tenant-id: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto nieprawidłowego punktu końcowego (kont osobistych i organizacji) sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje wdzierżawy. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Convert single-tenant app to multitenant on Microsoft Entra ID.

  1. ServiceBusTemplate jest automatycznie konfigurowana i można ją automatycznie połączyć bezpośrednio z własnymi fasolami, jak pokazano w poniższym przykładzie:

    @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();
        }
    
    }
    

Odbieranie komunikatów z usługi Azure Service Bus

Aby odbierać komunikaty, wykonaj następujące czynności:

  1. Wypełnij opcje konfiguracji poświadczeń.

  2. Dodaj adnotację @EnableAzureMessaging, która powoduje wykrywanie metod opatrzonych adnotacją @ServiceBusListener, niejawnie tworząc kontener nasłuchiwania komunikatów.

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

    Uwaga

    Aby uniknąć powtórzeń, od wersji 5.21.0 adnotacja włączająca @EnableAzureMessaging w Spring Cloud Azure Auto-configure jest włączana automatycznie.

  3. Gdy infrastruktura ServiceBus jest dostępna, możesz opatrzyć dowolny komponent adnotacją @ServiceBusListener, aby utworzyć punkt końcowy nasłuchiwania. Następujący składnik tworzy punkt końcowy odbiornika w kolejce QUEUE_NAME:

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

Dostosowywanie właściwości klienta usługi Service Bus

Deweloperzy mogą używać AzureServiceClientBuilderCustomizer do dostosowywania właściwości klienta usługi Service Bus. Poniższy przykład dostosowuje właściwość sessionIdleTimeout w ServiceBusClientBuilder:

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

Przykłady

Aby uzyskać więcej informacji, zobacz repozytorium azure-spring-boot-samples w serwisie GitHub.