Spring Cloud Azure-stöd för Spring Messaging Azure Service Bus

Den här artikeln beskriver hur du kan använda Spring Cloud Azure och Spring Messaging Azure Service Bus. Spring Framework ger omfattande stöd för integrering med meddelandesystem.

Spring Messaging för Azure Service Bus

Viktiga begrepp

Azure Service Bus är en fullständigt hanterad meddelandeförmedlare för företag med meddelandeköer och ämnen för publicering och prenumeration. Spring Messaging för Azure Service Bus-projektet tillämpar grundläggande Spring-begrepp på utvecklingen av Service Bus-baserade meddelandelösningar. Den innehåller en mall som en abstraktion på hög nivå för att skicka meddelanden. Det ger också stöd för meddelandedrivna POJO:er med @ServiceBusListener anteckningar och en lyssnarcontainer. Dessa bibliotek främjar användningen av beroendeinmatning och deklarativ konfiguration. I alla dessa fall kan du se likheter med JMS-stödet i Spring Framework och RabbitMQ-stödet i Spring AMQP.

Konfiguration av beroenden

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

Konfiguration

Biblioteket innehåller följande konfigurationsalternativ för ServiceBusTemplate och @ServiceBusListener:

Fastighet Typ Beskrivning
spring.cloud.azure.message-converter.isolated-object-mapper booleskt Om en isolerad ObjectMapper-böna används för Service Bus-meddelandekonverteraren. Aktiverad som standard.
spring.cloud.azure.servicebus.enabled booleskt Om en Azure Service Bus är aktiverad.
spring.cloud.azure.servicebus.connection-string Sträng Anslutningssträngsvärde för Service Bus-namnområde.
spring.cloud.azure.servicebus.custom-endpoint-address Sträng Den anpassade slutpunktsadress som ska användas vid anslutning till Service Bus.
spring.cloud.azure.servicebus.namespace Sträng Service Bus-namnområdesvärde, som är prefixet för FQDN. Ett FQDN ska bestå av NamespaceName.DomainName
spring.cloud.azure.servicebus.entity-type Sträng Entitetstyp för en Azure Service Bus.

Grundläggande användning

Custom Service Bus-meddelandekonverterare

Det finns två sätt att konfigurera Service Bus-meddelandekonverteraren:

  • Konfigurera följande egenskap så att standardkonverteraren för Service Bus-meddelanden använder en ObjectMapper böna, som kan vara din anpassade böna ObjectMapper eller en som hanteras av Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definiera Service Bus-meddelandekonverterarens böna direkt:

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

Skicka meddelanden till Azure Service Bus

Använd följande steg för att skicka meddelanden:

  1. Fyll i konfigurationsalternativen för autentiseringsuppgifter med någon av följande metoder:

    • För autentiseringsuppgifter som DefaultAzureCredentialkonfigurerar du följande egenskaper i din application.yml-fil:

      spring:
        cloud:
          azure:
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • För autentiseringsuppgifter som anslutningssträng konfigurerar du följande egenskaper i filen application.yml:

      spring:
        cloud:
          azure:
            servicebus:
              connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • För autentiseringsuppgifter som hanterade identiteter konfigurerar du följande egenskaper i din application.yml-fil:

      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}
      

Anmärkning

Följande värden tillåts för tenant-id: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din enklientapp till flerklient finns i Konvertera enklientapp till flerklient på Microsoft Entra ID.

  • För autentiseringsuppgifter för en service principal konfigurerar du följande egenskaper i din application.yml-fil:

    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}
    

Anmärkning

Följande värden tillåts för tenant-id: common, organizations, consumerseller klientorganisations-ID. Mer information om dessa värden finns i avsnittet Använd fel slutpunkt (personliga konton och organisationskonton) i Fel AADSTS50020 – Användarkonto från identitetsprovidern finns inte i klientorganisationen. Information om hur du konverterar din enklientapp till flerklient finns i Konvertera enklientapp till flerklient på Microsoft Entra ID.

  1. ServiceBusTemplate är automatiskt konfigurerad och du kan autokoppla den direkt till dina egna bönor, som du ser i följande exempel:

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

Ta emot meddelanden från Azure Service Bus

Använd följande steg för att ta emot meddelanden:

  1. Fyll i konfigurationsalternativen för autentiseringsuppgifter.

  2. Lägg till @EnableAzureMessaging-kommentaren, som utlöser identifieringen av metoder som kommenterats med @ServiceBusListeneroch skapar meddelandelyssnarecontainern under omslagen.

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

    Anmärkning

    För att undvika upprepning aktiveras annoteringen @EnableAzureMessaging automatiskt i Spring Cloud Azure Auto-configure från och med version 5.21.0.

  3. När ServiceBus-infrastrukturen finns kan du kommentera vilken böna som helst med @ServiceBusListener för att skapa en lyssnarslutpunkt. Följande komponent skapar en lyssnarslutpunkt i QUEUE_NAME-kön:

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

Anpassa Service Bus-klientegenskaper

Utvecklare kan använda AzureServiceClientBuilderCustomizer för att anpassa Service Bus-klientegenskaper. I följande exempel anpassas egenskapen sessionIdleTimeout i ServiceBusClientBuilder:

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

Exempel

Mer information finns i lagringsplatsen azure-spring-boot-samples på GitHub.