Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie Spring Cloud Azure und Spring Messaging Azure Service Bus verwenden können. Das Spring Framework bietet umfassende Unterstützung für die Integration in Messaging-Systeme.
Spring Messaging – Azure Service Bus
Wichtige Begriffe
Bei Azure Service Bus handelt es sich um einen vollständig verwalteten Nachrichtenbroker für Unternehmen mit Nachrichtenwarteschlangen und Publish/Subscribe-Themen. Das Spring Messaging for Azure Service Bus-Projekt wendet kernige Spring-Konzepte auf die Entwicklung von Bus-basierten Service-Messaging-Lösungen an. Sie stellt eine Vorlage als allgemeine Abstraktion zum Senden von Nachrichten bereit. Es bietet auch Unterstützung für nachrichtengesteuerte POJOs mit @ServiceBusListener Anmerkungen und einem Listenercontainer. Diese Bibliotheken fördern die Verwendung von Abhängigkeitsinjektion und deklarativer Konfiguration. In all diesen Fällen können Sie Ähnlichkeiten mit der JMS-Unterstützung im Spring Framework und RabbitMQ-Support in Spring AMQP sehen.
Einrichtung von Abhängigkeiten
<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
Die Bibliothek bietet die folgenden Konfigurationsoptionen für ServiceBusTemplate und @ServiceBusListener:
| Eigentum | Typ | BESCHREIBUNG |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
boolean | Gibt an, ob ein isolierter ObjectMapper-Bean für den ServiceBus-Nachrichtenkonverter verwendet wird. Standardmäßig aktiviert. |
spring.cloud.azure.servicebus.enabled |
boolean | Gibt an, ob ein Azure Service Bus aktiviert ist. |
spring.cloud.azure.servicebus.connection-string |
Schnur | Service Bus-Namespace-Verbindungszeichenfolgenwert. |
spring.cloud.azure.servicebus.custom-endpoint-address |
Schnur | Die benutzerdefinierte Endpunktadresse, die beim Herstellen einer Verbindung mit Service Bus verwendet werden soll. |
spring.cloud.azure.servicebus.namespace |
Schnur | Wert des Service Bus-Namespace, der das Präfix der FQDN ist. Ein FQDN sollte aus NamespaceName.DomainName bestehen. |
spring.cloud.azure.servicebus.entity-type |
Schnur | Entitätstyp eines Azure Service Bus. |
Grundlegende Nutzung
Benutzerdefinierter Servicebus-Nachrichtenkonverter
Es gibt zwei Möglichkeiten zum Konfigurieren des Service Bus-Nachrichtenkonverters:
Konfigurieren Sie die folgende Eigenschaft so, dass der standardmäßige Service Bus-Nachrichtenkonverter ein
ObjectMapperBean verwendet, das Ihr benutzerdefiniertesObjectMapperBean oder ein von Spring Boot verwaltetes Bean sein kann:spring: cloud: azure: message-converter: isolated-object-mapper: falseDefinieren Sie das Bean für den Service Bus-Nachrichtenkonverter direkt:
@Bean AzureMessageConverter<ServiceBusReceivedMessage, ServiceBusMessage> serviceBusMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
Senden von Nachrichten an Azure Service Bus
Gehen Sie folgendermaßen vor, um Nachrichten zu senden:
Füllen Sie die Optionen für die Konfiguration der Anmeldeinformationen mit einer der folgenden Methoden aus:
Konfigurieren Sie für Anmeldeinformationen als
DefaultAzureCredentialdie folgenden Eigenschaften in Ihrer Datei application.yml:spring: cloud: azure: servicebus: namespace: ${AZURE_SERVICE_BUS_NAMESPACE} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in Ihrer application.yml Datei:
spring: cloud: azure: servicebus: connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING} entity-type: ${AZURE_SERVICE_BUS_ENTITY_TYPE}Wenn Sie verwaltete Identitäten als Anmeldeinformationen verwenden, konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml-Datei:
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}
Hinweis
Die folgenden Werte sind für tenant-idzulässig: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falschen Endpunkt verwendet (persönliche Konten und Organisationskonten) in Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten nicht vorhanden. Informationen zum Umwandeln Ihrer Single-Tenant-App finden Sie unter Single-Tenant-App in eine Multitenant-App auf Microsoft Entra ID umwandeln.
Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in Ihrer application.yml-Datei:
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}
Hinweis
Die folgenden Werte sind für tenant-idzulässig: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falschen Endpunkt verwendet (persönliche Konten und Organisationskonten) in Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten nicht vorhanden. Informationen zum Umwandeln Ihrer Single-Tenant-App finden Sie unter Single-Tenant-App in eine Multitenant-App auf Microsoft Entra ID umwandeln.
ServiceBusTemplateist automatisch konfiguriert, und Sie können es direkt in Ihre eigenen Bohnen verkabeln, wie im folgenden Beispiel gezeigt:@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(); } }
Empfangen von Nachrichten von Azure Service Bus
Führen Sie die folgenden Schritte aus, um Nachrichten zu empfangen:
Füllen Sie die Konfigurationsoptionen für die Anmeldedaten aus.
Fügen Sie die
@EnableAzureMessagingAnmerkung hinzu, die die Ermittlung von Methoden auslöst, die mit@ServiceBusListenerkommentiert werden, wodurch der Container für den Nachrichtenlistener unter den Deckeln erstellt wird.@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }Hinweis
Um Wiederholungen zu vermeiden, wird die Annotation
@EnableAzureMessagingseit Version5.21.0von Spring Cloud Azure automatisch aktiviert.Wenn die ServiceBus-Infrastruktur vorhanden ist, können Sie eine beliebige Bean mit
@ServiceBusListenerannotieren, um einen Listener-Endpunkt zu erstellen. Die folgende Komponente erstellt einen Listener-Endpunkt für dieQUEUE_NAME-Warteschlange:@Component public class MyBean { @ServiceBusListener(destination = "QUEUE_NAME") public void processMessage(String content) { // ... } }
Anpassen von ServiceBus-Clienteigenschaften
Entwickler können AzureServiceClientBuilderCustomizer zum Anpassen von Service Bus-Clienteigenschaften verwenden. Im folgenden Beispiel wird die eigenschaft sessionIdleTimeout in ServiceBusClientBuilderangepasst:
@Bean
public AzureServiceClientBuilderCustomizer<ServiceBusClientBuilder.ServiceBusSessionProcessorClientBuilder> customizeBuilder() {
return builder -> builder.sessionIdleTimeout(Duration.ofSeconds(10));
}
Beispiele
Weitere Informationen finden Sie im azure-spring-boot-samples Repository auf GitHub.