Podpora Spring Cloud Azure pro Spring Messaging Azure Service Bus

Tento článek popisuje, jak můžete používat Spring Cloud Azure a Spring Messaging Azure Service Bus. Spring Framework poskytuje rozsáhlou podporu integrace se systémy zasílání zpráv.

Zasílání zpráv ve Spring pro Azure Service Bus

Klíčové koncepty

Azure Service Bus je plně spravovaný podnikový zprostředkovatel zpráv s frontami zpráv a tématy publikování a odběru. Projekt Spring Messaging pro Azure Service Bus používá základní koncepty Spring pro vývoj řešení zasílání zpráv založených na sběrnici. Poskytuje šablonu jako abstrakci vysoké úrovně pro odesílání zpráv. Poskytuje také podporu pro objekty POJ řízené zprávami s @ServiceBusListener poznámkami a kontejnerem naslouchacího procesu. Tyto knihovny podporují použití injektáže závislostí a deklarativní konfigurace. Ve všech těchto případech vidíte podobnosti s podporou JMS v rámci podpory Spring Framework a RabbitMQ v aplikaci Spring AMQP.

Nastavení závislostí

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

Konfigurace

Knihovna poskytuje následující možnosti konfigurace pro ServiceBusTemplate a @ServiceBusListener:

Vlastnictví Typ Popis
spring.cloud.azure.message-converter.isolated-object-mapper Boolean Určuje, zda se pro převaděč zpráv Service Bus používá izolovaný objekt ObjectMapper bean. Ve výchozím nastavení je povoleno.
spring.cloud.azure.servicebus.enabled Boolean Určuje, jestli je povolená služba Azure Service Bus.
spring.cloud.azure.servicebus.connection-string Řetězec Hodnota připojovacího řetězce pro obor názvů služby Service Bus
spring.cloud.azure.servicebus.custom-endpoint-address Řetězec Vlastní adresa koncového bodu, která se má použít při připojování ke službě Service Bus.
spring.cloud.azure.servicebus.namespace Řetězec Hodnota oboru názvů služby Service Bus, což je předpona plně kvalifikovaného názvu domény. FQDN by se měl skládat z NamespaceName.DomainName
spring.cloud.azure.servicebus.entity-type Řetězec Typ entity služby Azure Service Bus.

Základní použití

Vlastní převaděč zpráv služby Service Bus

Existují dva způsoby konfigurace převaděče zpráv služby Service Bus:

  • Nakonfigurujte následující vlastnost tak, aby výchozí převaděč zpráv Service Bus používal ObjectMapper bean, což může být vaše vlastní ObjectMapper bean nebo jedna spravovaná aplikací Spring Boot:

    spring:
      cloud:
        azure:
          message-converter:
            isolated-object-mapper: false
    
  • Definujte převaděč zpráv Service Bus přímo:

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

Odesílání zpráv do služby Azure Service Bus

K odesílání zpráv použijte následující postup:

  1. Pomocí jednoho z následujících přístupů vyplňte možnosti konfigurace přihlašovacích údajů:

    • Pro přihlašovací údaje jako DefaultAzureCredentialnakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            servicebus:
              namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • Pro přihlašovací údaje jako připojovací řetězec nakonfigurujte v souboru application.yml následující vlastnosti:

      spring:
        cloud:
          azure:
            servicebus:
              connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
              entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}
      
    • U přihlašovacích údajů jako spravovaných identit nakonfigurujte v souboru application.yml následující vlastnosti:

      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}
      

Poznámka:

Pro tenant-idjsou povoleny následující hodnoty: common, organizations, consumersnebo ID tenanta. Další informace o těchto hodnotách najdete v části Použití nesprávného koncového bodu (osobní a organizační účty) v části Chyba AADSTS50020 – Uživatelský účet poskytovatele identity neexistuje v tenantovi. Informace o převodu aplikace s jedním nájemcem na vícenájemcovou najdete v kapitole Převod jednoklientských aplikací na vícenájemcovou vMicrosoft Entra ID.

  • Pro přihlašovací údaje pro instanční objekt služby nakonfigurujte v souboru application.yml následující vlastnosti:

    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}
    

Poznámka:

Pro tenant-idjsou povoleny následující hodnoty: common, organizations, consumersnebo ID tenanta. Další informace o těchto hodnotách najdete v části Použití nesprávného koncového bodu (osobní a organizační účty) v části Chyba AADSTS50020 – Uživatelský účet poskytovatele identity neexistuje v tenantovi. Informace o převodu aplikace s jedním nájemcem na vícenájemcovou najdete v kapitole Převod jednoklientských aplikací na vícenájemcovou vMicrosoft Entra ID.

  1. ServiceBusTemplate je automaticky nakonfigurovaný a můžete ho automaticky připojit přímo do vlastních fazolí, jak je znázorněno v následujícím příkladu:

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

Příjem zpráv ze služby Azure Service Bus

K příjmu zpráv použijte následující postup:

  1. Vyplňte možnosti konfigurace přihlašovacích údajů.

  2. Přidejte anotaci @EnableAzureMessaging, která spustí vyhledávání metod anotovaných pomocí @ServiceBusListener a na pozadí vytvoří kontejner naslouchače zpráv.

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

    Poznámka:

    Aby se zabránilo opakování, od verze 5.21.0 se anotace @EnableAzureMessaging automaticky povoluje pomocí Spring Cloud Azure Auto-configure.

  3. Pokud je k dispozici infrastruktura ServiceBus, můžete libovolný bean anotovat pomocí @ServiceBusListener a vytvořit tak koncový bod naslouchače. Následující komponenta vytvoří koncový bod naslouchacího procesu ve frontě QUEUE_NAME:

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

Přizpůsobení vlastností klienta služby Service Bus

Vývojáři můžou pomocí AzureServiceClientBuilderCustomizer přizpůsobit vlastnosti klienta služby Service Bus. Následující příklad přizpůsobí vlastnost sessionIdleTimeout v ServiceBusClientBuilder:

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

Vzorky

Další informace najdete v úložišti na GitHubu azure-spring-boot-samples .