Dokumentation zu Spring Cloud Azure

Dieser Artikel enthält Referenzdokumentation für Spring Cloud Azure 4.3.0.

Dieses Dokument ist nur für Spring Cloud Azure: 4.3.0. Weitere Informationen zu unterstützten Versionen finden Sie in der Spring Versionszuordnung .

Spring ist ein von VMware entwickeltes Open-Source-Anwendungsframework, das ein vereinfachtes, modulares Verfahren für die Erstellung von Java-Anwendungen bereitstellt. Spring Cloud Azure ist ein Open-Source-Projekt, das eine nahtlose Spring-Integration mit Azure bietet.

Hilfe erhalten

Wenn Sie Fragen zu dieser Dokumentation haben, erstellen Sie ein GitHub-Problem in einem der folgenden GitHub-Repositorys. Pull Requests sind auch willkommen.

GitHub-Repositorys BESCHREIBUNG
Azure/azure-sdk-for-java Dieses Repository enthält den Quellcode.
MicrosoftDocs/azure-dev-docs Dieses Repository enthält die Dokumentation.

Neuerungen in 4.0 seit 3.10.x

Diese Dokumentation umfasst Änderungen, die seit 3.10 vorgenommen wurden. Diese Hauptversion bringt bessere Sicherheit, schlankere Abhängigkeiten, Unterstützung für die Produktionsbereitschaft und vieles mehr.

Tipp

Weitere Informationen zum Migrieren zu 4.0 finden Sie im Migrationshandbuch für 4.0.

In der folgenden Liste werden einige der Änderungen zusammengefasst, die Spring Cloud Azure 4.0 bietet:

  • Eine einheitliche Entwicklungserfahrung mit einheitlichem Projektnamen, Artefakte-ID und Eigenschaften.
  • Vereinfachte Abhängigkeitsverwaltung mithilfe einer einzelnen spring-cloud-azure-dependencies BOM.
  • Erweitert Azure-Support auf Spring Initializr, um Kafka, Event Hubs, Azure Cache for Redis und Azure App Configuration abzudecken.
  • Zurückgesetzte Frühjahrsmodulabhängigkeiten zum Entfernen von übersteigenden Schichten und Entanglement.
  • Unterstützung für verwaltete Identitäten für Azure App Configuration, Event Hubs, Service Bus, Cosmos DB, Key Vault, Storage Blob und Speicherwarteschlange.
  • Weitere Unterstützung für Authentifizierungsmethoden im zugrunde liegenden Azure SDK aus unseren Spring-Bibliotheken, z. B. SAS-Token- und Token-Anmeldeinformationenauthentifizierung mit Service Bus und Event Hubs.
  • Die Anmeldeinformationenkette ist jetzt standardmäßig aktiviert, sodass Anwendungen Anmeldeinformationen aus Anwendungseigenschaften, Umgebungsvariablen, verwalteten Identitäten, IDEs usw. abrufen können.
  • Detaillierte Zugriffssteuerung auf Ressourcenebene (z. B. Service Bus-Warteschlange), um eine bessere Sicherheitsgovernance und Die Einhaltung von IT-Richtlinien zu ermöglichen.
  • Weitere Optionen, die in einem Spring-idiomatischen Weg verfügbar gemacht werden, durch eine erheblich verbesserte automatische Konfigurationsabdeckung von Azure SDK-Clients für synchrone und asynchrone Szenarien.
  • Es wurden Integritätsindikatoren für Azure App Configuration, Event Hubs, Cosmos DB, Key Vault, Speicher blob, Speicherwarteschlange und Speicherdatei hinzugefügt.
  • Spring Cloud Sleuth Support für alle HTTP-basierten Azure SDKs.

Migrationshandbuch für 4.0

Weitere Informationen zum Migrieren zu 4.0 finden Sie im Migrationshandbuch für 4.0.

Erste Schritte

Einrichten von Abhängigkeiten

Materialrechnung (BOM)

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-dependencies</artifactId>
      <version>${spring.cloud.azure.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Die Version für spring-cloud-azure-abhängigkeiten ist 4.3.0.

Startabhängigkeiten

Spring Cloud Azure Starters sind eine Reihe bequemer Abhängigkeitsdeskriptoren, die in Ihre Anwendung einbezogen werden sollen. Jeder Starter enthält alle Abhängigkeiten, die für die Verwendung des entsprechenden Spring Cloud Azure-Moduls erforderlich sind. Diese Starter erhöhen ihre Spring Boot-Anwendungsentwicklung mit Azure-Diensten.

Wenn Sie beispielsweise die Verwendung von Spring und Azure Cosmos DB für Datenpersistenz verwenden möchten, fügen Sie die spring-cloud-azure-starter-cosmos Abhängigkeit in Ihr Projekt ein.

In der folgenden Tabelle sind Anwendungsstarts aufgeführt, die von Spring Cloud Azure unter der com.azure.spring Gruppe bereitgestellt werden:

Name BESCHREIBUNG
spring-cloud-azure-starter Der Kernstarter, einschließlich der Unterstützung für die automatische Konfiguration.
spring-cloud-azure-starter-active-directory Der Start für die Verwendung von Azure Active Directory mit Spring Security.
spring-cloud-azure-starter-active-directory-b2c Der Start für die Verwendung von Azure Active Directory B2C mit Spring Security.
spring-cloud-azure-starter-appconfiguration Der Start für die Verwendung von Azure App Configuration.
spring-cloud-azure-starter-cosmos Der Start für die Verwendung von Azure Cosmos DB.
spring-cloud-azure-starter-eventhubs Der Start für die Verwendung von Azure Event Hubs.
spring-cloud-azure-starter-keyvault Der Start für die Verwendung von Azure Key Vault.
spring-cloud-azure-starter-keyvault-secrets Der Start für die Verwendung von Azure Key Vault Secrets.
spring-cloud-azure-starter-keyvault-zertifikate Der Start für die Verwendung von Azure Key Vault Zertifikaten.
spring-cloud-azure-starter-servicebus Der Start für die Verwendung von Azure Service Bus.
spring-cloud-azure-starter-servicebus-jms Der Start für die Verwendung von Azure Service Bus und JMS.
spring-cloud-azure-starter-storage Der Start für die Verwendung von Azure Storage.
spring-cloud-azure-starter-storage-blob Der Start für die Verwendung des Azure Storage Blob.
spring-cloud-azure-starter-storage-file-share Der Start für die Verwendung der Azure Storage-Dateifreigabe.
Spring-cloud-azure-starter-storage-queue Der Start für die Verwendung der Azure Storage-Warteschlange.
spring-cloud-azure-starter-aktor Der Start für die Verwendung des Spring Boot-Aktors, der produktionsfähige Features bereitstellt.

In der folgenden Tabelle werden Starter für die Unterstützung von Spring Data aufgeführt:

Name BESCHREIBUNG
spring-cloud-azure-starter-data-cosmos Der Start für die Verwendung von Azure Cosmos DB und Spring Data Cosmos DB.

In der folgenden Tabelle werden Starter für die Spring-Integrationsunterstützung aufgeführt:

Name BESCHREIBUNG
spring-cloud-azure-starter-integration-eventhubs Der Start für die Verwendung von Azure Event Hubs und Spring Integration.
spring-cloud-azure-starter-integration-servicebus Der Start für die Verwendung von Azure Service Bus und Spring Integration.
spring-cloud-azure-starter-integration-storage-queue Der Start für die Verwendung der Azure Storage-Warteschlange und der Springintegration.

In der folgenden Tabelle sind Starter für spring Cloud Stream-Unterstützung aufgeführt:

Name BESCHREIBUNG
spring-cloud-azure-starter-stream-eventhubs Die Starter für die Verwendung von Azure Event Hubs und Spring Cloud Stream Binder.
spring-cloud-azure-starter-stream-servicebus Der Start für die Verwendung von Azure Service Bus und Spring Cloud Stream Binder.

Learning Spring Cloud Azure

Wir haben eine vollständige Liste von Beispielen vorbereitet, um die Verwendung anzuzeigen. Diese Beispiele finden Sie unter Spring Cloud Azure Samples.

Spring Cloud Azure-Konfiguration

Die meisten Azure Service SDKs können in zwei Kategorien nach Transporttyp unterteilt werden: HTTP-basiert oder AMQP-basiert. Es gibt Eigenschaften, die allen SDKs gemeinsam sind, z. B. Authentifizierungsprinzipale und Azure-Umgebungseinstellungen oder häufig http-basierte Clients, z. B. Protokollierungsebene zum Protokollieren von HTTP-Anforderungen und -Antworten. In Spring Cloud Azure 4.0 haben wir fünf allgemeine Kategorien von Konfigurationseigenschaften hinzugefügt, die Sie für jeden Azure-Dienst angeben können.

In der folgenden Tabelle sind Eigenschaften aufgeführt, die für mehrere Dienste gemeinsam verwendet werden:

Eigenschaft BESCHREIBUNG
spring.cloud.azure.azure-service.client Konfiguriert die Transportclients unter einem Azure Service SDK.
spring.cloud.azure.azure-service.credential Konfiguriert die Authentifizierung mit Azure Active Directory für ein Azure Service SDK.
spring.cloud.azure.azure-service.profile Konfiguriert die Azure-Cloudumgebung für ein Azure Service SDK.
spring.cloud.azure.azure-service.proxy Konfiguriert die Proxyoptionen für ein Azure Service SDK.
spring.cloud.azure.azure-service.retry Konfiguriert die für ein Azure Service SDK anwendbaren Wiederholungsoptionen. Die Wiederholungsoptionen haben einen Teil der SDKs unterstützt, es gibt keine spring.cloud.azure.cosmos.retry.

Es gibt einige Eigenschaften, die Sie für verschiedene Azure-Dienste freigeben können, z. B. um denselben Dienstprinzipal für den Zugriff auf Azure Cosmos DB und Azure Event Hubs zu verwenden. Mit Spring Cloud Azure 4.0 können Sie Eigenschaften definieren, die auf alle Azure SDKs im Namespace spring.cloud.azureangewendet werden.

In der folgenden Tabelle sind globale Eigenschaften aufgeführt:

Eigenschaft BESCHREIBUNG
spring.cloud.azure.client Konfiguriert die Transportclients; Gilt standardmäßig für alle Azure SDKs.
spring.cloud.azure.credential Konfiguriert die Authentifizierung mit Azure Active Directory für alle Azure SDKs standardmäßig.
spring.cloud.azure.profile Konfiguriert standardmäßig die Azure-Cloudumgebung für alle Azure SDKs.
spring.cloud.azure.proxy Konfiguriert standardmäßig die Proxyoptionen für alle Azure SDK-Clients.
spring.cloud.azure.retry Konfiguriert standardmäßig die Wiederholungsoptionen für alle Azure SDK-Clients.

Hinweis

Die unter jedem Azure-Dienst konfigurierten Eigenschaften überschreiben die globalen Konfigurationen.

Die Präfixe der Konfigurationseigenschaften wurden seit Spring Cloud Azure 4.0 für den spring.cloud.azure Namespace vereinheitlicht, um Konfigurationseigenschaften konsistenter und intuitiver zu gestalten. In der folgenden Tabelle finden Sie eine kurze Überprüfung der Präfixe für unterstützte Azure-Dienste:

Azure-Dienst Präfix der Konfigurationseigenschaft Verknüpfung mit Konfigurationseigenschaften
Azure App Configuration spring.cloud.azure.appconfiguration App Configuration Eigenschaften
Azure Cosmos DB spring.cloud.azure.cosmos Cosmos DB-Eigenschaften
Azure Event Hubs spring.cloud.azure.eventhubs Ereignishubs-Eigenschaften
Azure Key Vault-Zertifikat spring.cloud.azure.keyvault.certificate Key Vault Zertifikateigenschaften
Azure Key Vault Geheimer Schlüssel spring.cloud.azure.keyvault.secret Key Vault Secrets-Eigenschaften
Azure Service Bus spring.cloud.azure.servicebus Service Bus-Eigenschaften
Azure Storage-Blob spring.cloud.azure.storage.blob Speicher-Blob-Eigenschaften
Azure Storage File Share spring.cloud.azure.storage.fileshare Eigenschaften der Speicherdateifreigabe
Azure Storage-Warteschlange spring.cloud.azure.storage.queue Speicherwarteschlangeneigenschaften

Spring Cloud Azure-Authentifizierung

DefaultAzureCredential

Dies DefaultAzureCredential ist für die meisten Szenarien geeignet, in denen die Anwendung in der Azure Cloud ausgeführt werden soll. Dies liegt daran, dass die DefaultAzureCredential Anmeldeinformationen kombiniert, die häufig zum Authentifizieren verwendet werden, wenn sie mit Anmeldeinformationen bereitgestellt werden, die zur Authentifizierung in einer Entwicklungsumgebung verwendet werden.

Hinweis

DefaultAzureCredential soll den Einstieg in das SDK erleichtern, indem häufige Szenarien mit vernünftigem Standardverhalten behandelt werden. Wenn Sie mehr Kontrolle wünschen oder Ihr Szenario nicht von den Standardeinstellungen bereitgestellt wird, sollten Sie andere Anmeldeinformationstypen verwenden.

DefaultAzureCredential versucht, sich über die folgenden Mechanismen in der angegebenen Reihenfolge zu authentifizieren:

Diagramm mit dem Authentifizierungsmechanismus für

  • Umgebung: DefaultAzureCredential liest Kontoinformationen, die mit Umgebungsvariablen angegeben werden, und nutzt diese zur Authentifizierung.
  • Verwaltete Identität: Wenn die Anwendung auf einem Azure-Host mit aktivierter verwalteter Identität bereitgestellt ist, wird DefaultAzureCredential mit diesem Konto authentifiziert.
  • IntelliJ: Wenn Sie sich über das Azure-Toolkit für IntelliJ authentifiziert haben, führt DefaultAzureCredential die Authentifizierung mit diesem Konto aus.
  • Visual Studio Code: Wenn Sie sich über das Plug-In für das Visual Studio Code Azure-Konto authentifiziert haben, führt DefaultAzureCredential die Authentifizierung mit diesem Konto aus.
  • Azure CLI: Wenn Sie ein Konto über den Azure CLI-Befehl az login authentifiziert haben, führt DefaultAzureCredential die Authentifizierung mit diesem Konto aus.

Tipp

Stellen Sie sicher, dass dem Sicherheitsprinzipal ausreichende Berechtigungen für den Zugriff auf die Azure-Ressource erteilt wurden. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure Active Directory.

Hinweis

Seit Spring Cloud Azure AutoConfigure 4.1.0 wird standardmäßig automatisch ein ThreadPoolTaskExecutor Beann springCloudAzureCredentialTaskExecutor registriert und verwaltet alle Threads, die von Azure Identity erstellt wurden. Der Name jedes threads, der von diesem Threadpool verwaltet wird, wird mit präfixiert az-identity-. Diese ThreadPoolTaskExecutor Bohnen sind unabhängig von der Executor Von Spring Boot bereitgestellten Bohnen.

Verwaltete Identitäten

Eine häufige Herausforderung ist die Verwaltung von Geheimen und Anmeldeinformationen, die zur Sicherung der Kommunikation zwischen verschiedenen Komponenten verwendet werden, die eine Lösung bilden. Dank verwalteter Identitäten müssen keine Anmeldeinformationen mehr verwaltet werden. Verwaltete Identitäten stellen eine Identität bereit, die Anwendungen beim Herstellen einer Verbindung mit Ressourcen verwenden, die Azure Active Directory-Authentifizierung (Azure AD) unterstützen. Anwendungen können die verwaltete Identität verwenden, um Azure AD-Token abzurufen. Beispielsweise kann eine Anwendung eine verwaltete Identität verwenden, um auf Ressourcen wie Azure Key Vault zuzugreifen, in denen Sie Anmeldeinformationen auf sichere Weise speichern oder auf Speicherkonten zugreifen können.

Wir empfehlen, verwaltete Identität zu verwenden, anstatt Verbindungszeichenfolge oder Schlüssel in Ihrer Anwendung zu verwenden, da es sicherer ist und die Probleme beim Verwalten von Geheimen und Anmeldeinformationen speichert. In diesem Fall DefaultAzureCredential könnte das Szenario der lokalen Entwicklung mithilfe von lokal gespeicherten Kontoinformationen besser dienen und dann die Anwendung in Azure Cloud bereitstellen und verwaltete Identität verwenden.

Arten von verwalteten Identitäten

Es gibt zwei Arten von verwalteten Identitäten:

  • Systemzuweisung – Einige Azure-Dienste ermöglichen Es Ihnen, eine verwaltete Identität direkt in einer Dienstinstanz zu aktivieren. Wenn Sie eine systemseitig zugewiesene verwaltete Identität aktivieren, wird in Azure AD eine Identität erstellt, die an den Lebenszyklus der jeweiligen Dienstinstanz gebunden ist. Daher löscht Azure automatisch die Identität, wenn die Ressource gelöscht wird. Entwurfsbedingt kann nur diese Azure-Ressource diese Identität zum Anfordern von Token von Azure AD verwenden.
  • Benutzerzuweisung – Sie können auch eine verwaltete Identität als eigenständige Azure-Ressource erstellen. Sie können eine benutzerseitig zugewiesene verwaltete Identität erstellen und diese einer oder mehreren Instanzen eines Azure-Diensts zuweisen. Bei benutzerseitig zugewiesenen verwalteten Identitäten wird die Identität getrennt von den Ressourcen verwaltet, für die sie verwendet wird.

Hinweis

Wenn Sie eine vom Benutzer zugewiesene verwaltete Identität verwenden, können Sie die Client-ID über spring.cloud.azure.credential.managed-identity-client-id oder spring.cloud.azure.<azure-service>.credential.managed-identity-client-idangeben. Sie benötigen keine Anmeldeinformationenkonfiguration, wenn Sie eine vom System zugewiesene verwaltete Identität verwenden.

Tipp

Stellen Sie sicher, dass der Sicherheitsprinzipal genügend Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure Active Directory.

Weitere Informationen zu verwalteter Identität finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

Andere Anmeldeinformationentypen

Wenn Sie mehr Kontrolle wünschen oder Ihr Szenario nicht von den DefaultAzureCredential Standardeinstellungen unterstützt wird, sollten Sie andere Anmeldeinformationentypen verwenden.

Authentifizierung und Autorisierung mit Azure Active Directory

Mit Azure AD können Sie azure role-based Access Control (Azure RBAC) verwenden, um Berechtigungen für einen Sicherheitsprinzipal zu gewähren, was möglicherweise ein Benutzer oder ein Anwendungsdienstprinzipal sein kann. Wenn ein Sicherheitsprinzipal (ein Benutzer oder eine Anwendung) versucht, auf eine Azure-Ressource zuzugreifen, z. B. eine Event Hubs-Ressource, muss die Anforderung autorisiert werden. Mit Azure AD ist der Zugriff auf eine Ressource ein zweistufiger Prozess:

  1. Zunächst wird die Identität des Sicherheitsprinzipals authentifiziert und ein OAuth 2.0-Token zurückgegeben.
  2. Als Nächstes wird das Token als Teil einer Anforderung an den Azure-Dienst übergeben, um den Zugriff auf die angegebene Ressource zu autorisieren.
Authentifizieren mit Azure Active Directory

Um Anwendungen mit Ressourcen zu verbinden, die die Azure Active Directory (Azure AD)-Authentifizierung unterstützen, können Sie die folgenden Konfigurationen mit dem Präfix spring.cloud.azure.credential oder spring.cloud.azure.<azure-service>.credential

In der folgenden Tabelle sind Authentifizierungseigenschaften aufgeführt:

Eigenschaft BESCHREIBUNG
client-id Die Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
client-secret Der geheime Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
Clientzertifikatpfad Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
Clientzertifikatkennwort Das Kennwort der Zertifikatdatei.
username Der Benutzername, der beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
password Das Kennwort, das beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
managed-identity-enabled Ob verwaltete Identität aktiviert werden soll.

Tipp

Eine Liste aller Konfigurationseigenschaften von Spring Cloud Azure finden Sie in der Liste der Konfigurationseigenschaften.

Die Anwendung sucht an mehreren Stellen nach verfügbaren Anmeldeinformationen und verwendet DefaultAzureCredential , wenn keine Anmeldeinformationen konfiguriert sind. Wenn Sie bestimmte Anmeldeinformationen verwenden möchten, lesen Sie die folgenden Beispiele für Anleitungen.

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe einer system zugewiesenen verwalteten Identität authentifizieren:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe einer vom Benutzer zugewiesenen verwalteten Identität authentifizieren:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
    client-id: ${AZURE_CLIENT_ID}

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe eines Dienstprinzipals mit einem geheimen Clientschlüssel authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: ${AZURE_TENANT_ID}

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe eines Dienstprinzipals mit einem PFX-Clientzertifikat authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
    client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
  profile:
    tenant-id: ${AZURE_TENANT_ID}

Im folgenden Beispiel wird gezeigt, wie Sie mithilfe eines Dienstprinzipals mit client-PEM-Zertifikat authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
  profile:
    tenant-id: ${AZURE_TENANT_ID}

Im folgenden Beispiel wird gezeigt, wie Sie sich mithilfe einer Benutzeranmeldeinformationen authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    username: ${AZURE_USER_USERNAME}
    password: ${AZURE_USER_PASSWORD}

Im folgenden Beispiel wird gezeigt, wie Sie sich mit Key Vault mit einem anderen Dienstprinzipal authentifizieren. In diesem Beispiel wird die Anwendung mit zwei Anmeldeinformationen konfiguriert: eine vom System zugewiesene verwaltete Identität und ein Dienstprinzipal. Der geheime Key Vault geheime Client verwendet den Dienstprinzipal, aber alle anderen Komponenten verwenden stattdessen verwaltete Identität.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
  keyvault.secret:
    credential:
      client-id: ${AZURE_CLIENT_ID}
      client-secret: ${AZURE_CLIENT_SECRET}
    profile:
      tenant-id: ${AZURE_TENANT_ID}
Autorisieren des Zugriffs mit Azure Active Directory

Der Autorisierungsschritt erfordert, dass dem Sicherheitsprinzipal mindestens eine Azure-Rolle zugewiesen wird. Die möglichen Berechtigungen eines Sicherheitsprinzipals sind durch die Rollen vorgegeben, die dem Prinzipal zugewiesen sind.

In der folgenden Tabelle sind die integrierten Azure-Rollen aufgeführt, um den Zugriff auf Azure-Dienste zu autorisieren, die in Spring Cloud Azure unterstützt werden:

Rolle BESCHREIBUNG
App Configuration-Datenbesitzer Ermöglicht den Vollzugriff auf App Configuration-Daten.
App Configuration-Datenleser Ermöglicht den Lesezugriff auf App Configuration-Daten.
Azure Event Hubs-Datenbesitzer Ermöglicht den vollständigen Zugriff auf Azure Event Hubs Ressourcen.
Azure Event Hubs-Datenempfänger Ermöglicht Empfängern den Zugriff auf die Azure Event Hubs-Ressourcen.
Azure Event Hubs-Datensender Ermöglicht Absendern den Zugriff auf die Azure Event Hubs-Ressourcen.
Azure Service Bus-Datenbesitzer Ermöglicht den vollständigen Zugriff auf Azure Service Bus Ressourcen.
Azure Service Bus-Datenempfänger Ermöglicht den Empfang des Zugriffs auf Azure Service Bus Ressourcen.
Azure Service Bus-Datensender Ermöglicht das Senden des Zugriffs auf Azure Service Bus Ressourcen.
Besitzer von Speicherblobdaten Bietet Vollzugriff auf Azure Storage-Blobcontainer und -daten, einschließlich POSIX-Zugriffssteuerung.
Leser von Speicherblobdaten Lesen und Auflisten von Azure Storage-Containern und -Blobs.
Storage-Warteschlangendatenleser Lesen und Auflisten von Azure Storage-Warteschlangen und -Warteschlangennachrichten.
Mitwirkender von Redis-Cache Verwalten von Redis-Caches.

Hinweis

Wenn Sie Spring Cloud Azure Resource Manager verwenden, um die Verbindungszeichenfolgen für Event Hubs, Service Bus und Speicherwarteschlange oder die Eigenschaften des Caches für Redis abzurufen, weisen Sie die integrierte Azure-Rolle Contributorzu. Azure Cache for Redis ist speziell, und Sie können auch die Rolle zuweisen, um die Redis Cache Contributor Redis-Eigenschaften abzurufen.

Hinweis

Eine Key Vault-Zugriffsrichtlinie legt fest, ob ein bestimmter Sicherheitsprinzipal (eine Anwendung oder eine Benutzergruppe) verschiedene Vorgänge für Geheimnisse, Schlüssel und Zertifikate in Key Vault ausführen kann. Sie können Zugriffsrichtlinien über das Azure-Portal, die Azure-CLI oder Azure PowerShell zuweisen. Weitere Informationen finden Sie unter Zuweisen einer Key Vault-Zugriffsrichtlinie.

Wichtig

Azure Cosmos DB stellt zwei integrierte Rollendefinitionen zur Verfügung: Cosmos DB Built-in Data Reader und Cosmos DB Built-in Data Contributor. Azure-Portal Unterstützung für die Rollenverwaltung ist jedoch noch nicht verfügbar. Weitere Informationen zum Berechtigungsmodell, Rollendefinitionen und Rollenzuweisung finden Sie unter Konfigurieren der rollenbasierten Zugriffssteuerung mit Azure Active Directory für Ihr Azure Cosmos DB-Konto.

SAS-Token

Sie können auch Dienste für die Authentifizierung mit freigegebener Zugriffssignatur (SAS) konfigurieren. spring.cloud.azure.<azure-service>.sas-token ist die Zu konfigurierende Eigenschaft. Verwenden Sie spring.cloud.azure.storage.blob.sas-token beispielsweise die Authentifizierung beim Speicher-Blobdienst.

Verbindungszeichenfolgen

Verbindungszeichenfolge wird von einigen Azure-Diensten unterstützt, um Verbindungsinformationen und Anmeldeinformationen bereitzustellen. Um eine Verbindung mit diesen Azure-Diensten mithilfe von Verbindungszeichenfolge herzustellen, konfigurieren spring.cloud.azure.<azure-service>.connection-stringSie einfach . Konfigurieren spring.cloud.azure.eventhubs.connection-string Sie beispielsweise, um eine Verbindung mit dem Ereignishubs-Dienst herzustellen.

Produktionsbereit

Wir haben Integritätsindikatoren für App Configuration, Event Hubs, Cosmos DB, Key Vault, Storage Blob, Storage Queue und Storage File sowie Spring Cloud Sleuth Support für alle HTTP-basierten Azure SDKs hinzugefügt. Als Beispiel können Sie überprüfen, ob ein Speicher-Blob über Spring Boot-Aktorendpunkt hoch oder unten ist, sowie Abhängigkeiten und Latenzen nachverfolgen, die von Ihrer Anwendung bis zu Key Vault gehen.

Integritätsanzeige aktivieren

Um die Integritätsindikatoren zu aktivieren, fügen Sie die Abhängigkeit von Spring Cloud Azure Actuator Starter zu Ihrer pom.xml-Datei hinzu. Diese Abhängigkeit umfasst auch die spring-boot-starter-actuator.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-actuator</artifactId>
</dependency>

In der folgenden Tabelle sind konfigurierbare Eigenschaften aufgeführt, um Integritätsindikatoren für jeden Azure-Dienst zu aktivieren oder zu deaktivieren:

Azure-Dienst Eigenschaft
App Configuration management.health.azure-appconfiguration.enabled
Cosmos DB management.health.azure-cosmos.enabled
Event Hubs management.health.azure-eventhubs.enabled
Key Vault Zertifikat management.health.azure-keyvault-certificate.enabled
Key Vault Geheimer Schlüssel management.health.azure-keyvault-secret.enabled
Speicherblob management.health.azure-storage-blob.enabled
Speicherdateifreigabe management.health.azure-storage-fileshare.enabled
Speicherwarteschlange management.health.azure-storage-queue.enabled

Wichtig

Das Aufrufen des Integritätsendpunkts von Azure-Diensten kann zu zusätzlichen Gebühren führen. Wenn Sie http://HOST_NAME:{port}/actuator/health/cosmos beispielsweise aufrufen, um die Integritätsinformationen von Cosmos DB abzurufen, wird die Anforderungseinheiten (RUs) berechnet. Weitere Informationen finden Sie unter Anforderungseinheiten in Azure Cosmos DB.

Hinweis

Zum Aufrufen des Integritätsendpunkts sollte Cosmosdie Option spring.cloud.azure.cosmos.database konfiguriert werden; Andernfalls wird der Integritätsstatus unknown zurückgegeben.

Wenn Sie den Integritätsendpunkt aufrufen möchten, ist die Rolle erforderlichStorage QueueStorage Account Contributor, wenn Azure AD sie zum Autorisieren verwendet wird.

Sleuth aktivieren

Wenn Sie Azure SDK-Aktivitäten mithilfe von Spring Cloud Sleuth nachverfolgen möchten, fügen Sie die folgende Abhängigkeit von Spring Cloud Azure Trace Sleuth ihrer pom.xml-Datei hinzu:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-trace-sleuth</artifactId>
</dependency>

Hinweis

Derzeit werden nur HTTP-basierte Azure SDK-Clients unterstützt. Beispielsweise werden Event Hubs und Service Bus mit AMQP-Transport derzeit nicht unterstützt. Für diese Anforderungen empfiehlt es sich, Azure-Anwendung Insights zu verwenden.

Automatisches Konfigurieren von Azure SDK-Clients

Spring Boot vereinfacht die Erfahrung der Spring Cloud Azure-Entwicklung. Spring Cloud Azure-Starter sind eine Reihe bequemer Abhängigkeitsdeskriptoren, die in Ihre Anwendung einbezogen werden sollen. Die Starter behandeln die Objekt-Instanziierungs- und Konfigurationslogik, sodass Sie nicht müssen. Jeder Starter hängt spring-cloud-azure-starter davon ab, kritischen Konfigurationsbits wie die Azure-Cloudumgebung und Authentifizierungsinformationen bereitzustellen. Sie können diese als Eigenschaften in einer YAML-Datei konfigurieren, wie im folgenden Beispiel gezeigt:

spring:
  cloud:
    azure:
      profile:
        tenant-id: ${AZURE_TENANT_ID}
        cloud-type: Azure
      credential:
        client-id: ${AZURE_CLIENT_ID}

Hinweis

Die cloud-Eigenschaft ist optional.

Diese Eigenschaften sind optional, und wenn nicht angegeben, versucht Spring Boot, sie automatisch für Sie zu finden. Ausführliche Informationen dazu, wie Spring Boot diese Eigenschaften findet, finden Sie in der Dokumentation.

Setup für Abhängigkeiten

Es gibt zwei Möglichkeiten, Spring Cloud Azure-Starter zu verwenden. Die erste Möglichkeit besteht darin, Azure SDKs mit der spring-cloud-azure-starter Abhängigkeit zu verwenden, wie im folgenden Beispiel gezeigt:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-cosmos</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>

Die zweite Möglichkeit besteht darin, das Hinzufügen von Azure SDK-Abhängigkeiten zu vermeiden und stattdessen den Spring Cloud Azure Starter für jeden Dienst direkt einzuschließen. Mit Cosmos DB würden Sie beispielsweise die folgende Abhängigkeit hinzufügen:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-cosmos</artifactId>
</dependency>

Tipp

Eine Liste der unterstützten Starter finden Sie unter Starterabhängigkeiten.

Konfiguration

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, müssen Sie sicherstellen, dass der Sicherheitsprinzipal genügend Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure Active Directory.

Konfigurationseigenschaften für jeden Azure-Dienst sind unter Präfix spring.cloud.azure.<azure-service>.

Tipp

Eine Liste aller Konfigurationseigenschaften von Spring Cloud Azure finden Sie in der Liste der Konfigurationseigenschaften.

Grundlegende Verwendung

Durch das Hinzufügen der folgenden Eigenschaften zu Ihrer Application.yaml-Datei wird der Cosmos DB-Client für Sie automatisch konfiguriert.

spring:
  cloud:
    azure:
      cosmos:
        database: ${AZURE_COSMOS_DATABASE_NAME}
        endpoint: ${AZURE_COSMOS_ENDPOINT}
        consistency-level: eventual
        connection-mode: direct

Dann sind beide CosmosClientCosmosAsyncClient im Kontext verfügbar und können automatisch verkabelt werden, wie im folgenden Beispiel gezeigt:

class Demo {
@Autowired
private CosmosClient cosmosClient;

    @Override
    public void run() {
        User item = User.randomUser();
        CosmosContainer container = cosmosClient.getDatabase(databaseName).getContainer(containerName);
        container.createItem(item);
    }
}

Beispiele

Weitere Informationen finden Sie unter azure-spring-boot-samples auf GitHub.

Ressourcenhandhand

Das Spring-Projekt bietet eine Spring Resources-Abstraktion, um auf eine Reihe von Ressourcen mit niedriger Ebene zuzugreifen. Das Projekt bietet Schnittstellen wie Resource, ResourceLoader und ResourcePatternResolver. Spring Cloud Azure implementiert diese Schnittstellen für Azure Storage-Dienste, mit denen Sie mithilfe des Spring-Programmiermodells mit Azure Storage Blob und File Share interagieren können. Spring Cloud Azure bietet spring-cloud-azure-starter-storage-blob und spring-cloud-azure-starter-storage-file-share ermöglicht die automatische Konfiguration von Azure Storage Blob und Azure Storage File Share.

In der folgenden Tabelle sind azure Storage-verwandte Bibliotheken aufgeführt:

Starter Dienst BESCHREIBUNG
spring-cloud-azure-starter-storage-blob Azure Storage-Blob Ermöglicht für unstrukturierte Daten in großem Umfang die Speicherung und den Zugriff in Blockblobs.
spring-cloud-azure-starter-storage-file-share Azure Storage File Share Verfügt über vollständig verwaltete Clouddateifreigaben, auf die Sie von überall aus mit dem branchenüblichen SMB-Protokoll (Server Message Block) zugreifen können.

Setup für Abhängigkeiten

<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
    </dependency>
</dependencies>

Die spring-cloud-azure-starter-storage-blob Abhängigkeit ist nur erforderlich, wenn Sie Azure Storage Blob verwenden.

Die spring-cloud-azure-starter-storage-file-share Abhängigkeit ist nur erforderlich, wenn Sie Azure Storage File Share verwenden.

Tipp

Darüber hinaus unterstützen spring-cloud-azure-starter-storage wir alle Features des Speichers. Wenn Sie es verwenden möchten, ist die Eigenschaft zum spring.cloud.azure.storage.enable Konfigurieren und der Standardwert wahr. Anschließend spring.cloud.azure.storage.<storage-service>.enable können Sie nicht verwendete Dienste deaktivieren.

Konfiguration

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, müssen Sie sicherstellen, dass der Sicherheitsprinzipal genügend Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure Active Directory.

In der folgenden Tabelle sind die konfigurierbaren Eigenschaften von spring-cloud-azure-starter-storage-blob:

Eigenschaft Standard BESCHREIBUNG
spring.cloud.azure.storage.blob.enabled true Ein Wert, der angibt, ob ein Azure Blob Storage Dienst aktiviert ist.
spring.cloud.azure.storage.blob.endpoint Der URI zum Herstellen einer Verbindung mit Azure Blob Storage.
spring.cloud.azure.storage.blob.account-key Der private Schlüssel zum Herstellen einer Verbindung mit Azure Blob Storage.
spring.cloud.azure.storage.blob.account-name Der Name des Azure Storage-Blob-Kontos.

In der folgenden Tabelle sind die konfigurierbaren Eigenschaften von spring-cloud-azure-starter-storage-file-share:

Eigenschaft Standard BESCHREIBUNG
spring.cloud.azure.storage.fileshare.enabled true Ein Wert, der angibt, ob der Azure File Storage-Dienst aktiviert ist.
spring.cloud.azure.storage.fileshare.endpoint Der URI zum Herstellen einer Verbindung mit Azure File Storage.
spring.cloud.azure.storage.fileshare.account-key Der private Schlüssel zum Herstellen einer Verbindung mit Azure File Storage.
spring.cloud.azure.storage.fileshare.account-name Der Name des Azure Storage File Share-Kontos.

Grundlegende Verwendung

Fügen Sie der Datei application.yml die folgenden Eigenschaften hinzu:

spring:
  cloud:
    azure:
      storage:
        blob:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint: ${STORAGE_BLOB_ENDPOINT}
        fileshare:
          account-name: ${STORAGE_ACCOUNT_NAME}
          account-key: ${STORAGE_ACCOUNT_KEY}
          endpoint:  ${STORAGE_FILESHARE_ENDPOINT}

Abrufen einer Ressource

Abrufen einer Ressource mit @Value

Sie können die Anmerkung verwenden, um eine Blobressource @Value("azure-blob://[your-container-name]/[your-blob-name]") automatisch zu verkabeln, wie im folgenden Beispiel gezeigt:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

Sie können die Anmerkung verwenden, um eine Dateiressource @Value("azure-file://[your-fileshare-name]/[your-file-name]") automatisch zu verkabeln, wie im folgenden Beispiel gezeigt:

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
Abrufen einer Ressource mit ResourceLoader
@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");

// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");
Abrufen von Ressourcen nach Mustern

Sie können eine Implementierungsklasse für ResourcePatternResolver die Suche nach Ressourcen verwenden. Wird verwendet AzureStorageBlobProtocolResolver , um Ressourcen zu durchsuchen blob und AzureStorageFileProtocolResolver Ressourcen zu durchsuchen file .

  • Bei der Mustersuche sollte die searchPattern Suche beginnen mit azure-blob:// oder azure-file://. Dies bedeutet beispielsweise, azure-blob://**/** dass alle Blobs in allen Containern auflisten und azure-blob://demo-container/** alle Blobs im demo-container Container, einschließlich eines unterordners, auflisten.

  • Bei der Speicherortsuche sollte der searchLocation Dateipfad mit azure-blob:// oder azure-file:// mit dem verbleibenden Dateipfad beginnen, andernfalls wird eine Ausnahme ausgelöst.

@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;

@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;

// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");

// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");

Behandeln von Ressourcen

Herunterladen von Daten aus bestimmten Ressourcen

Sie können eine Ressource aus Azure Storage Blob oder Dateifreigabe mit der getInputStream() Methode von Resource.

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

//...

// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();

// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();
Hochladen von Daten in bestimmte Ressourcen

Sie können eine Ressource in Azure Blob oder Dateispeicher hochladen, indem Sie das Spring Resource in WritableResourcedas folgende Beispiel umwandeln:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

String data = "sampledata";

// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
    blobos.write(data.getBytes());
}

// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
    fileos.write(data.getBytes());
}

Mehrteiliger Upload

Dateien, die größer als 4 MiB sind, werden parallel in Azure Storage hochgeladen.

Beispiele

Sehen Sie sich das Speicher-blob-Beispiel und das Speicherdateibeispiel auf GitHub an.

Verwaltung von Geheimnissen

Spring Cloud Azure-KonstruktPropertySource, das geheime Schlüssel enthält, die in Azure Key Vault Secrets gespeichert sind.

Einrichten von Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
</dependency>

Tipp

Darüber hinaus unterstützen spring-cloud-azure-starter-keyvault wir alle Features von Key Vault. Wenn Sie dies verwenden möchten, spring.cloud.azure.keyvault.enable ist die Eigenschaft, die konfiguriert werden soll, und der Standardwert ist true. Anschließend können spring.cloud.azure.keyvault.<keyvault-service>.enable Sie nicht benötigte Dienste deaktivieren.

Grundlegende Verwendung

Wenn Sie sich authentifizieren client-id möchten und client-secretdie folgenden Eigenschaften erforderlich sind:

Configuration Properties

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources:
            - name: key-vault-property-souece-1
              endpoint: ${ENDPOINT_1}
            - name: key-vault-property-souece-2
              endpoint: ${ENDPOINT_2}

Java-Code

@SpringBootApplication
public class SampleApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;
    @Value("${sampleProperty2}")
    private String sampleProperty2;
    @Value("${samplePropertyInMultipleKeyVault}")
    private String samplePropertyInMultipleKeyVault;

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
        System.out.println("sampleProperty2: " + sampleProperty2);
        System.out.println("samplePropertyInMultipleKeyVault: " + samplePropertyInMultipleKeyVault);
    }
}

Erweiterte Verwendung

Sonderzeichen im Eigenschaftennamen

Key Vault geheimen Namen unterstützen nur Zeichen in [0-9a-zA-Z-]. Weitere Informationen finden Sie im Abschnitt"Vault-Name" und "Objektname" von Azure Key Vault Schlüsseln, Geheimen Schlüsseln und Zertifikaten. Wenn Ihr Eigenschaftenname andere Zeichen enthält, können Sie die in den folgenden Abschnitten beschriebenen Problemumgehungen verwenden.

Anstelle von . geheimen Namen verwenden -

. wird in geheimen Namen nicht unterstützt. Wenn Ihre Anwendung einen Eigenschaftsnamen enthält., zspring.datasource.url. B. ersetzen Sie beim .- Speichern des geheimen Schlüssels in Azure Key Vault. Speichern Sie spring-datasource-url beispielsweise in Azure Key Vault. In Ihrer Anwendung können Sie weiterhin spring.datasource.url den Eigenschaftswert abrufen.

Hinweis

Diese Methode kann keine Anforderung wie spring.datasource-url. Wenn Sie in Key Vault speichernspring-datasource-url, wird nur spring.datasource.url der spring-datasource-url Eigenschaftswert abgerufen, aber spring.datasource-url nicht unterstützt. Informationen zum Behandeln dieses Falls finden Sie im Abschnitt "Verwenden von Eigenschaftenplatzhaltern ".

Verwenden von Eigenschaftsplatzhaltern

Angenommen, Sie legen diese Eigenschaft in der Datei "application.properties " fest:

property.with.special.character__=${propertyWithoutSpecialCharacter}

Die Anwendung erhält einen propertyWithoutSpecialCharacter Schlüsselnamen und weist seinen Wert zu property.with.special.character__.

Beachtet Groß-/Kleinschreibung

Um den Modus für Groß-/Kleinschreibung zu aktivieren, können Sie die folgende Eigenschaft festlegen:

spring.cloud.azure.keyvault.secret.property-sources[].case-sensitive=true

Nicht alle Geheimen in Key Vault abrufen

Wenn Sie 1000 Geheimnisse in der Key Vault gespeichert haben, und Sie möchten nur 3 davon verwenden. Sie können die drei geheimen Namen nach spring.cloud.azure.keyvault.secret.property-sources[].secret-keysauflisten.

Festlegen des Aktualisierungsintervalls

Standardmäßig werden die Geheimen KeyVaultPropertySource alle 30 Minuten aktualisiert. Sie können die Zeit nach spring.cloud.azure.keyvault.secret.property-sources[].refresh-intervalkonfigurieren. Beispiel: spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval=60m bedeutet, dass sie alle 60 Minuten aktualisiert werden. Legen Sie fest, dass 0 die automatische Aktualisierung deaktiviert wird.

PropertySource-Priorität

Wenn der Schlüssel in mehreren PropertySources vorhanden ist, wird dieser durch die Priorität entschieden.

  • Wenn keine Eigenschaftsliste vorhanden ist SystemEnvironmentPropertySource , KeyVaultPropertySource wird die höchste Priorität verwendet.
  • Wenn es in der PropertySource-Liste vorhanden ist SystemEnvironmentPropertySource , SystemEnvironmentPropertySource haben Sie höhere Priorität als KeyVaultPropertySource. Dies bedeutet, dass Sie die Umgebungsvariable verwenden können, um den Key Vault geheimen Wert in Ihrer Anwendung außer Kraft zu setzen.
  • Wenn mehrere KeyVaultPropertySource in PropertySource-Liste vorhanden sind, ist die Definitionsreihenfolge die Prioritätsreihenfolge. Nehmen Sie das Beispiel als Beispiel vor, key-vault-property-souece-1 hat eine höhere Priorität als key-vault-property-souece-2.

Alle konfigurierbaren Eigenschaften

Eigenschaft Standardwert BESCHREIBUNG
spring.cloud.azure.keyvault.secret.property-source-enabled true Gibt an, ob die Key Vault-Eigenschaftsquelle aktiviert werden soll.
spring.cloud.azure.keyvault.secret.property-sources[].name Name dieser Eigenschaftsquelle.
spring.cloud.azure.keyvault.secret.property-sources[].endpoint Azure Key Vault Endpunkt.
spring.cloud.azure.keyvault.secret.property-sources[].groß-empfindlich false Gibt an, ob die geheimen Schlüssel Groß-/Kleinschreibung beachtet werden.
spring.cloud.azure.keyvault.secret.property-sources[].secret-keys Die geheimen Schlüssel, die für diese Eigenschaftsquelle unterstützt werden. Alle Schlüssel werden abgerufen, wenn diese Eigenschaft fehlt.
spring.cloud.azure.keyvault.secret.property-sources[].refresh-interval 30m Zeitintervall zum Aktualisieren aller Key Vault geheimen Schlüssel.
spring.cloud.azure.keyvault.secret.property-sources[].service-version Geheime Dienstversion, die beim Erstellen von API-Anforderungen verwendet wird.
spring.cloud.azure.keyvault.secret.property-sources[].client Clientbezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].credential Credential related properties.
spring.cloud.azure.keyvault.secret.property-sources[].profile Profilbezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].proxy Proxybezogene Eigenschaften.
spring.cloud.azure.keyvault.secret.property-sources[].wiederholen Wiederholen Sie verwandte Eigenschaften.

Beispiele

Sehen Sie sich die Beispiele für spring-cloud-azure-starter-keyvault-secrets auf GitHub an.

Unterstützung von Spring Data

Unterstützung von Spring Data Cosmos DB

Azure Cosmos DB ist ein global verteilter Datenbankdienst, mit dem Entwickler mit verschiedenen Standard-APIs wie SQL, MongoDB, Graph und Azure Table Storage arbeiten können.

Einrichten von Abhängigkeiten

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>

Konfiguration

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, stellen Sie sicher, dass dem Sicherheitsprinzipal ausreichende Berechtigungen für den Zugriff auf die Azure-Ressource erteilt wurden. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure Active Directory.

In der folgenden Tabelle sind die konfigurierbaren Eigenschaften von spring-cloud-azure-starter-data-cosmos:

Eigenschaft BESCHREIBUNG
spring.cloud.azure.cosmos.enabled Ein Wert, der angibt, ob Azure Cosmos Service aktiviert ist. Der Standardwert lautet true.
spring.cloud.azure.cosmos.database Die Cosmos DB-Datenbank-ID.
spring.cloud.azure.cosmos.endpoint Der URI zum Verbinden von Cosmos DB.
spring.cloud.azure.cosmos.key Der PrivateKey zum Verbinden von Cosmos DB.
spring.cloud.azure.cosmos.credential.client-certificate-password Das Kennwort der Zertifikatdatei.
spring.cloud.azure.cosmos.credential.client-certificate-path Der Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.cosmos.credential.client-id Die Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.cosmos.credential.client-secret Der geheime Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.cosmos.credential.managed-identity-enabled Gibt an, ob verwaltete Identität aktiviert werden soll. Der Standardwert ist false.
spring.cloud.azure.cosmos.credential.password Das Kennwort, das beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.cosmos.credential.username Der Benutzername, der beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.cosmos.populate-query-metrics Ein Wert, der angibt, ob Diagnosezeichenfolgen und Abfragemetriken aufgefüllt werden sollen. Der Standardwert ist false.
spring.cloud.azure.cosmos.consistency-level Eine Konsistenzstufe für Azure Cosmos DB.

Wichtige Begriffe

In der folgenden Liste sind die wichtigsten Konzepte der Spring Data-Unterstützung aufgeführt:

  • Die Spring Data CrudRepository und ReactiveCrudRepository, die die folgende grundlegende CRUD-Funktionalität bieten:

    • save
    • findAll
    • findOne (nach ID)
    • deleteAll
    • delete (nach ID)
    • delete (Entität)
  • Die Spring Data @Id Anmerkung. Es gibt zwei Möglichkeiten, ein Feld in einer Domänenklasse einem id Azure Cosmos DB-Dokument zuzuordnen:

    • Kommentieren Sie ein Feld in der Domänenklasse mit @Id. Dieses Feld wird dem Dokument id in Cosmos DB zugeordnet.
    • Legen Sie den Namen dieses Felds auf id. Dieses Feld wird dem Dokument id in Cosmos DB zugeordnet.

    Hinweis

    Wenn beide Methoden angewendet werden, hat die @Id Anmerkung höhere Priorität.

  • Benutzerdefinierte Auflistungsnamen. Standardmäßig ist der Auflistungsname der Klassenname der Benutzerdomänenklasse. Um sie anzupassen, fügen Sie Ihrer Domänenklasse Anmerkungen @Document(collection="myCustomCollectionName") hinzu, das ist alles.

  • Unterstützt azure Cosmos DB-Partition. Wenn Sie ein Feld Ihrer Domänenklasse als Partitionsschlüsselfeld angeben möchten, kommentieren Sie es mit @PartitionKey. Wenn Sie CRUD-Vorgänge ausführen, geben Sie ihren Partitionswert an. Weitere Beispiele finden Sie unter AddressRepositoryIT.java auf GitHub.

  • Unterstützt den Benutzerdefinierten Abfragesuchevorgang für Spring Data .

  • Unterstützt spring-boot-starter-data-rest.

  • Unterstützt Listen- und geschachtelte Typen in Domänenklassen.

Grundlegende Verwendung

Verwenden eines privaten Schlüssels für den Zugriff auf Cosmos DB

Die einfachste Möglichkeit, Cosmos DB mit spring-cloud-azure-starter-data-cosmos einem Primärschlüssel zu verbinden. Fügen Sie die folgenden Eigenschaften hinzu:

spring:
  cloud:
    azure:
      cosmos:
        key: ${AZURE_COSMOS_KEY}
        endpoint: ${AZURE_COSMOS_ENDPOINT}
        database: ${AZURE_COSMOS_DATABASE}
Definieren einer Entität

Definieren Sie eine Entität als Dokument in Cosmos DB, wie im folgenden Beispiel gezeigt:

@Container(containerName = "mycollection")
public class User {
    @Id
    private String id;
    private String firstName;
    @PartitionKey
    private String lastName;
    private String address;

    public User() {
    }

    public User(String id, String firstName, String lastName, String address) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return String.format("%s %s, %s", firstName, lastName, address);
    }
}

Das id Feld wird als Dokument id in Azure Cosmos DB verwendet. Alternativ können Sie ein beliebiges Feld @Id kommentieren, um es dem Dokument idzuzuordnen.

Die Anmerkung @Container(containerName = "mycollection") wird verwendet, um den Auflistungsnamen Ihres Dokuments in Azure Cosmos DB anzugeben.

Erstellen von Repositorys

Um Repositorys zu erstellen, erweitern Sie die ReactiveCosmosRepository Schnittstelle, die Spring Data Repository-Unterstützung bereitstellt.

@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
    Flux<User> findByFirstName(String firstName);
}

Derzeit stellt die ReactiveCosmosRepository Schnittstelle grundlegende Speicher-, Lösch- und Suchvorgänge bereit. Weitere Vorgänge werden später unterstützt.

Erstellen einer Anwendungsklasse

Im folgenden Beispiel wird eine Anwendungsklasse mit allen Komponenten erstellt:

@SpringBootApplication
public class CosmosSampleApplication implements CommandLineRunner {

private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSampleApplication.class);

    @Autowired
    private UserRepository repository;

    @Autowired
    private CosmosProperties properties;

    public static void main(String[] args) {
        SpringApplication.run(CosmosSampleApplication.class, args);
    }

    public void run(String... var1) {
        final User testUser = new User("testId", "testFirstName",
                "testLastName", "test address line one");

        // Save the User class to Azure Cosmos DB database.
        final Mono<User> saveUserMono = repository.save(testUser);

        final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");

        //  Nothing happens until we subscribe to these Monos.
        //  findById will not return the user as user isn't present.
        final Mono<User> findByIdMono = repository.findById(testUser.getId());
        final User findByIdUser = findByIdMono.block();
        Assert.isNull(findByIdUser, "User must be null");

        final User savedUser = saveUserMono.block();
        Assert.state(savedUser != null, "Saved user must not be null");
        Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()),
                "Saved user first name doesn't match");

        firstNameUserFlux.collectList().block();

        final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
        Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");

        final User result = optionalUserResult.get();
        Assert.state(result.getFirstName().equals(testUser.getFirstName()),
                "query result firstName doesn't match!");
        Assert.state(result.getLastName().equals(testUser.getLastName()),
                "query result lastName doesn't match!");
        LOGGER.info("findOne in User collection get result: {}", result.toString());

    }

    @PostConstruct
    public void setup() {
        // For this example, remove all of the existing records.
        this.repository.deleteAll().block();
    }
}

Dieses Beispiel enthält eine automatisch verkabelte UserRepository Schnittstelle zur Unterstützung von Speichern, Löschen und Suchen von Vorgängen.

Beispiele

Siehe die Azure-spring-boot-samples auf GitHub.

Abgesehen von der Verwendung der spring-cloud-azure-starter-data-cosmos Bibliothek können Sie die Bibliothek direkt für komplexere Szenarien verwenden azure-spring-data-cosmos . Weitere Informationen finden Sie unter Spring Data for Azure Cosmos DB.

Spring Security-Unterstützung

Spring Security mit Azure Active Directory

Wenn Sie eine Webanwendung erstellen, sind Identitäts- und Zugriffsverwaltung immer grundlegende Elemente.

Azure bietet eine großartige Plattform, um Ihre Anwendungsentwicklungsreise zu demokratisieren, da es nicht nur einen Cloud-Basisidentitätsdienst bietet, sondern auch eine tiefe Integration mit dem rest des Azure-Ökosystems.

Spring Security hat es leicht gemacht, Ihre Spring-basierten Anwendungen mit leistungsstarken Abstraktionen und erweiterbaren Schnittstellen zu sichern. Wie das Spring-Framework jedoch leistungsfähig sein kann, ist es nicht auf einen bestimmten Identitätsanbieter zugeschnitten.

Dies spring-cloud-azure-starter-active-directory bietet die optimale Möglichkeit, Ihre Webanwendung mit einem Azure Active Directory -Mandanten (Azure AD für kurze Zeit) zu verbinden und Ihren Ressourcenserver mit Azure AD zu schützen. Hierbei wird das OAuth 2.0-Protokoll verwendet, um Webanwendungen und Ressourcenserver zu schützen.

Zugreifen auf eine Webanwendung

In diesem Szenario wird der OAuth 2.0-Autorisierungscode-Genehmigungsfluss verwendet, um sich bei einem Benutzer mit einem Microsoft-Konto anzumelden.

Systemdiagramm

Systemdiagramm für eine eigenständige Webanwendung.

Erstellen erforderlicher Ressourcen in Azure
  1. Lesen Sie MS-Dokumente zum Registrieren einer Anwendung mit dem Microsoft Identity Platform.

  2. Erstellen Sie die App-Registrierung. Abrufen AZURE_TENANT_IDund AZURE_CLIENT_IDAZURE_CLIENT_SECRET.

  3. Festlegen redirect URI auf APPLICATION_BASE_URI/login/oauth2/code/, z. B http://localhost:8080/login/oauth2/code/. . Der Schwanz / ist erforderlich.

Hinzufügen von erforderlichen Abhängigkeiten
<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>
Hinzufügen der erforderlichen Eigenschaften
spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}

Starten Sie jetzt die Anwendung, und greifen Sie nach Browser auf Ihre Anwendung zu, und sie werden dann in die Microsoft-Anmeldeseite umgeleitet.

Erweiterte Verwendungen
Hinzufügen zusätzlicher Sicherheitskonfigurationen
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {

        /**
         * Add configuration logic as needed.
         */
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            super.configure(http);
            http.authorizeRequests()
                    .anyRequest().authenticated();
            // Do some custom configuration
        }
    }
Autorisieren des Zugriffs nach App-Rollen
  1. Erstellen erforderlicher Ressourcen in Azure

Hinweis

Wenn Sie die App-rollenbasierte Zugriffssteuerung verwenden möchten, können Sie keine Gruppennamen in role Anspruch setzen. Refs: [Konfigurieren von gruppen optionalen Ansprüchen] (/azure/active-directory/develop/active-directory-optional-claims#configuring-groups-optional-claims).

  1. Schützen Sie bestimmte Methoden.

    class Demo {
        @GetMapping("Admin")
        @ResponseBody
        @PreAuthorize("hasAuthority('APPROLE_Admin')")
        public String admin() {
            return "Admin message";
        }
    }
Autorisieren des Zugriffs nach Gruppenname oder Gruppen-ID
  1. Fügen Sie verwandte Konfigurationseigenschaften hinzu.

        spring:
          cloud:
            azure:
              active-directory:
                user-group:
                  allowed-group-names: group1_name_1, group2_name_2
                  # 1. If allowed-group-ids == all, then all group ID will take effect.
                  # 2. If "all" is used, we should not configure other group ids.
                  # 3. "all" is only supported for allowed-group-ids, not supported for allowed-group-names.
                  allowed-group-ids: group_id_1, group_id_2
    
  2. Schützen Sie bestimmte Methoden.

        @Controller
        public class RoleController {
            @GetMapping("group1")
            @ResponseBody
            @PreAuthorize("hasRole('ROLE_group1')")
            public String group1() {
                return "group1 message";
            }
    
            @GetMapping("group2")
            @ResponseBody
            @PreAuthorize("hasRole('ROLE_group2')")
            public String group2() {
                return "group2 message";
            }
    
            @GetMapping("group1Id")
            @ResponseBody
            @PreAuthorize("hasRole('ROLE_<group1-id>')")
            public String group1Id() {
                return "group1Id message";
            }
    
            @GetMapping("group2Id")
            @ResponseBody
            @PreAuthorize("hasRole('ROLE_<group2-id>')")
            public String group2Id() {
                return "group2Id message";
            }
        }
    
Verwenden von National Azure anstelle von globalen Azure

Mit Ausnahme der globalen Azure-Cloud wird Azure Active Directory in den folgenden nationalen Clouds bereitgestellt:

  • Azure Government

  • Azure China 21Vianet

  • Azure Deutschland

Hier sehen Sie ein Beispiel für die Verwendung von Azure China 21Vianet.

spring:
  cloud:
    azure:
      active-directory:
        base-uri: https://login.partner.microsoftonline.cn
        graph-base-uri: https://microsoftgraph.chinacloudapi.cn

Sie können auf diese MS-Dokumentation verweisen, um weitere Informationen aus MS-Dokumenten zu nationalen Cloudbereitstellungen zu erhalten.

Konfigurieren der Umleitungs-URI-Vorlage

Entwickler können den Umleitungs-URI anpassen.

Systemdiagramm für Umleitungs-URIs.

  1. Fügen Sie Eigenschaften in application.yml hinzu redirect-uri-template .

        spring:
          cloud:
            azure:
              active-directory:
                redirect-uri-template: ${REDIRECT-URI-TEMPLATE}
    
  2. Aktualisieren sie umleitungs-uri in Azure-Portal.

    Konfigurieren sie die Umleitungs-URI-Vorlage.

  3. WebSecurityConfigurerAdapter aktualisieren

Nachdem wir umleitungs-uri-Vorlage festgelegt haben, müssen wir folgendes aktualisieren WebSecurityConfigurerAdapter:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {
    /**
     * Add configuration logic as needed.
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.oauth2Login()
                .loginProcessingUrl("${REDIRECT-URI-TEMPLATE}")
                .and()
            .authorizeRequests()
                .anyRequest().authenticated();
    }
}
Beispiele

Beispielprojekt: aad-web-application.

Webanwendung, die auf Ressourcenserver zugreift

Systemdiagramm

Systemdiagramm für eine Webanwendung, die auf Ressourcenserver zugreift.

Erstellen erforderlicher Ressourcen in Azure
  1. Lesen Sie MS-Dokumente zum Registrieren einer Anwendung mit dem Microsoft Identity Platform.

  2. Erstellen Sie die App-Registrierung. Abrufen AZURE_TENANT_IDund AZURE_CLIENT_IDAZURE_CLIENT_SECRET.

  3. Festlegen redirect URI auf APPLICATION_BASE_URI/login/oauth2/code/, z. B http://localhost:8080/login/oauth2/code/. . Der Schwanz / ist erforderlich.

Hinzufügen von erforderlichen Abhängigkeiten
<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>
Hinzufügen der erforderlichen Eigenschaften
spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        authorization-clients:
          graph:
            scopes: https://graph.microsoft.com/Analytics.Read, email

Hier ist der Name von OAuth2AuthorizedClient, scopes bedeutet, graph dass die Bereiche bei der Anmeldung zustimmen müssen.

Verwenden von OAuth2AuthorizedClient in Ihrer Anwendung
public class Demo {
    @GetMapping("/graph")
    @ResponseBody
    public String graph(
    @RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphClient) {
        // toJsonString() is just a demo.
        // oAuth2AuthorizedClient contains access_token. We can use this access_token to access resource server.
        return toJsonString(graphClient);
    }
}

Starten Sie jetzt die Anwendung, und greifen Sie nach Browser auf Ihre Anwendung zu, und sie werden dann in die Microsoft-Anmeldeseite umgeleitet.

Erweiterte Verwendungen
Clientanmeldeinformationsfluss

Der Standardfluss ist der Autorisierungscodefluss, wenn Sie den Clientanmeldeinformationenfluss verwenden möchten, können Sie wie folgt konfigurieren:

spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        authorization-clients:
          graph:
            authorization-grant-type: client_credentials # Change type to client_credentials
            scopes: https://graph.microsoft.com/Analytics.Read, email
Zugreifen auf mehrere Ressourcenserver

In einer Webanwendung können Sie auf mehrere Ressourcenserver zugreifen, indem Sie wie folgt konfigurieren:

spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        authorization-clients:
          resource-server-1:
            scopes: # Scopes for resource-server-1
          resource-server-2:
            scopes: # Scopes for resource-server-2

Dann können Sie OAuth2AuthorizedClient in der Anwendung wie folgt verwenden.

public class Demo {
    @GetMapping("/resource-server-1")
    @ResponseBody
    public String graph(
    @RegisteredOAuth2AuthorizedClient("resource-server-1") OAuth2AuthorizedClient client) {
        return callResourceServer1(client);
    }

    @GetMapping("/resource-server-2")
    @ResponseBody
    public String graph(
    @RegisteredOAuth2AuthorizedClient("resource-server-2") OAuth2AuthorizedClient client) {
        return callResourceServer2(client);
    }
}

In früheren Beispielen werden alle Bereiche bei der ersten Anmeldung des Kunden zugestimmt, unabhängig davon, ob er zu resource-server-1 oder resource-server-2 gehört. Wenn Sie nicht zulassen möchten, dass der Kunde alle Bereiche zustimmt, können Sie wie folgt vorgehen:

spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        authorization-clients:
          resource-server-1:
            scopes: # Scopes for resource-server-1
          resource-server-2:
            on-demand: true  # means incremental consent
            scopes: # Scopes for resource-server-2
Beispiele

Beispielprojekt: aad-web-application.

Zugreifen auf einen Ressourcenserver

Dieses Szenario unterstützt die Anmeldung nicht, schützen Sie einfach den Server, indem Sie das Zugriffstoken überprüfen. Wenn das Zugriffstoken gültig ist, wird die Anforderung vom Server bereitgestellt.

Systemdiagramm

Systemdiagramm für die Verwendung eigenständiger Ressourcenserver.

Erstellen erforderlicher Ressourcen in Azure
  1. Lesen Sie MS-Dokumente zum Registrieren einer Anwendung mit dem Microsoft Identity Platform.

  2. Erstellen Sie die App-Registrierung. Abrufen AZURE_CLIENT_ID.

  3. Lesen Sie MS-Dokumente zum Konfigurieren einer Anwendung, um eine Web-API verfügbar zu machen.

  4. Stellen Sie eine Web-API mit dem Namen "Bereich Scope-1" zur Verfügung.

Hinzufügen von erforderlichen Abhängigkeiten
<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
</dependencies>
Hinzufügen der erforderlichen Eigenschaften
spring:
  cloud:
    azure:
      active-directory:
        credential:
          client-id: ${AZURE_CLIENT_ID}

Starten Sie jetzt Ihre Anwendung, und greifen Sie auf die Web-API Ihrer Anwendung zu.

  1. Sie erhalten 401 ohne Zugriffstoken.

  2. Greifen Sie auf Ihre Anwendung mit einem Zugriffstoken zu, werden die folgenden Ansprüche im Zugriffstoken überprüft:

    • iss: Das Zugriffstoken muss von Azure AD ausgestellt werden.

    • nbf: Aktuelle Uhrzeit kann nicht vor nbf.

    • exp: Aktuelle Uhrzeit kann nicht nach exp.

    • aud: Wenn spring.cloud.azure.active-directory.credential.client-id oder spring.cloud.azure.active-directory.credential.app-id-uri konfiguriert, muss die Zielgruppe dem konfigurierten oder app-id-urikonfigurierten Benutzer client-id entsprechen. Wenn die 2 Eigenschaften nicht konfiguriert sind, wird dieser Anspruch nicht überprüft.

Weitere Informationen zu Zugriffstoken finden Sie in MS-Dokumenten zu Microsoft Identity Platform Zugriffstoken.

Erweiterte Verwendungen
Hinzufügen zusätzlicher Sicherheitskonfigurationen
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2ResourceServerSecurityConfig extends AadResourceServerWebSecurityConfigurerAdapter {
    /**
     * Add configuration logic as needed.
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
    }
}
Überprüfen der Berechtigung nach Bereichen
  1. Erstellen erforderlicher Ressourcen in Azure

  2. Schützen Sie bestimmte Methoden.

    class Demo {
        @GetMapping("scope1")
        @ResponseBody
        @PreAuthorize("hasAuthority('SCOPE_Scope1')")
        public String scope1() {
            return "Congratulations, you can access `scope1` endpoint.";
        }
    }

Dies geschieht, wenn der Zugriffsendpunkt /scope1 die folgenden Ansprüche im Zugriffstoken überprüft wird:

  • scp: Der Wert muss enthalten Scope1.
Überprüfen der Berechtigung nach App-Rollen
  1. Erstellen erforderlicher Ressourcen in Azure

  2. Schützen Sie bestimmte Methoden.

    class Demo {
        @GetMapping("app-role1")
        @ResponseBody
        @PreAuthorize("hasAuthority('APPROLE_AppRole1')")
        public String appRole1() {
            return "Congratulations, you can access `app-role1` endpoint.";
        }
    }

Dies geschieht, wenn der Zugriffsendpunkt /app-role1 die folgenden Ansprüche im Zugriffstoken überprüft wird:

  • roles: Der Wert muss enthalten AppRole1.
Verwenden der JWT-Clientauthentifizierung

Verwenden Sie die folgenden Schritte, um ein JSON-Webtoken (JWT) für die Clientauthentifizierung zu verwenden:

  1. Weitere Informationen finden Sie im Abschnitt "Registrieren Ihres Zertifikats mit Microsoft Identity Platform Abschnitt Microsoft Identity Platform Anmeldeinformationen für anwendungsauthentifizierungszertifikate".
  2. Laden Sie ein PEM-Zertifikat in die anwendung hoch, die in der Azure-Portal registriert ist.
  3. Konfigurieren des Zertifikatpfads und des Kennworts einer . PFX oder . P12-Zertifikat .
  4. Fügen Sie der Clientkonfiguration die Eigenschaftskonfiguration spring.cloud.azure.active-directory.authorization-clients.azure.client-authentication-method=private_key_jwt hinzu, die über die JWT-Clientauthentifizierung authentifiziert werden soll.

Die folgende Beispielkonfigurationsdatei ist für ein Webanwendungsszenario vorgesehen. Die Zertifikatinformationen werden in den globalen Eigenschaften konfiguriert.

spring:
  cloud:
    azure:
      credential:
        client-id: ${AZURE_CLIENT_ID}
        client-certificate-path: ${AZURE_CERTIFICATE_PATH}
        client-certificate-password: ${AZURE_CERTIFICATE_PASSWORD}
      profile:
        tenant-id: ${AZURE_TENANT_ID}
      active-directory:
        enabled: true
        user-group:
          allowed-group-names: group1,group2
          allowed-group-ids: <group1-id>,<group2-id>
        post-logout-redirect-uri: http://localhost:8080
        authorization-clients:
          azure:
            client-authentication-method: private_key_jwt
          arm:
            client-authentication-method: private_key_jwt
            on-demand: true
            scopes: https://management.core.windows.net/user_impersonation
          graph:
            client-authentication-method: private_key_jwt
            scopes:
              - https://graph.microsoft.com/User.Read
              - https://graph.microsoft.com/Directory.Read.All
          webapiA:
            client-authentication-method: private_key_jwt
            scopes:
              - ${WEB_API_A_APP_ID_URL}/Obo.WebApiA.ExampleScope
          webapiB:
            client-authentication-method: private_key_jwt
            scopes:
              - ${WEB_API_B_APP_ID_URL}/.default
            authorization-grant-type: client_credentials

Sie können auch die Zertifikatinformationen in den active-directory Diensteigenschaften konfigurieren, wie in diesem Beispiel gezeigt:

spring:
  cloud:
    azure:
      active-directory:
        enabled: true
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-certificate-path: ${AZURE_CERTIFICATE_PATH}
          client-certificate-password: ${AZURE_CERTIFICATE_PASSWORD}
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        user-group:
          allowed-group-names: group1,group2
          allowed-group-ids: <group1-id>,<group2-id>
        post-logout-redirect-uri: http://localhost:8080
        authorization-clients:
          azure:
            client-authentication-method: private_key_jwt
          arm:
            client-authentication-method: private_key_jwt
            on-demand: true
            scopes: https://management.core.windows.net/user_impersonation
          graph:
            client-authentication-method: private_key_jwt
            scopes:
              - https://graph.microsoft.com/User.Read
              - https://graph.microsoft.com/Directory.Read.All
          webapiA:
            client-authentication-method: private_key_jwt
            scopes:
              - ${WEB_API_A_APP_ID_URL}/Obo.WebApiA.ExampleScope
          webapiB:
            client-authentication-method: private_key_jwt
            scopes:
              - ${WEB_API_B_APP_ID_URL}/.default
            authorization-grant-type: client_credentials
Beispiele

Beispielprojekt: aad-resource-server.

Ressourcenserver, der andere Ressourcenserver besucht

Systemdiagramm

Systemdiagramm für einen Ressourcenserver, der andere Ressourcenserver besucht.

Erstellen erforderlicher Ressourcen in Azure
  1. Lesen Sie MS-Dokumente zum Registrieren einer Anwendung mit dem Microsoft Identity Platform.

  2. Erstellen Sie die App-Registrierung. Abrufen AZURE_TENANT_IDund AZURE_CLIENT_IDAZURE_CLIENT_SECRET.

Hinzufügen von erforderlichen Abhängigkeiten
<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>
Hinzufügen der erforderlichen Eigenschaften
spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        authorization-clients:
          graph:
            scopes:
              - https://graph.microsoft.com/User.Read
Verwenden von OAuth2AuthorizedClient in Ihrer Anwendung
public class SampleController {
    @GetMapping("call-graph")
    public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graph) {
        return callMicrosoftGraphMeEndpoint(graph);
    }
}
Beispiele

Beispielprojekt: aad-resource-server-obo.

Webanwendung und Ressourcenserver innerhalb einer Anwendung

Erstellen erforderlicher Ressourcen in Azure
  1. Lesen Sie MS-Dokumente zum Registrieren einer Anwendung mit dem Microsoft Identity Platform.

  2. Erstellen Sie die App-Registrierung. Abrufen AZURE_TENANT_IDund AZURE_CLIENT_IDAZURE_CLIENT_SECRET.

Hinzufügen von erforderlichen Abhängigkeiten
<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>
Hinzufügen der erforderlichen Eigenschaften

Legen Sie die Eigenschaft spring.cloud.azure.active-directory.application-type auf web_application_and_resource_server, und geben Sie den Autorisierungstyp für jeden Autorisierungsclient an.

spring:
  cloud:
    azure:
      active-directory:
        profile:
          tenant-id: ${AZURE_TENANT_ID}
        credential:
          client-id: ${AZURE_CLIENT_ID}
          client-secret: ${AZURE_CLIENT_SECRET}
        app-id-uri: ${WEB_API_ID_URI}
        application-type: web_application_and_resource_server  # This is required.
        authorization-clients:
          graph:
            authorizationGrantType: authorization_code # This is required.
            scopes:
              - https://graph.microsoft.com/User.Read
              - https://graph.microsoft.com/Directory.Read.All
Definieren von securityConfigurationAdapter

Konfigurieren Sie mehrere HttpSecurity-Instanzen, AadWebApplicationAndResourceServerConfig enthalten zwei Sicherheitskonfigurationen für Ressourcenserver und Webanwendung.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadWebApplicationAndResourceServerConfig {

    @Order(1)
    @Configuration
    public static class ApiWebSecurityConfigurationAdapter extends AadResourceServerWebSecurityConfigurerAdapter {
        protected void configure(HttpSecurity http) throws Exception {
            super.configure(http);
            // All the paths that match `/api/**`(configurable) work as `Resource Server`, other paths work as `Web application`.
            http.antMatcher("/api/**")
                .authorizeRequests().anyRequest().authenticated();
        }
    }

    @Configuration
    public static class HtmlWebSecurityConfigurerAdapter extends AadWebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            super.configure(http);
            // @formatter:off
            http.authorizeRequests()
                    .antMatchers("/login").permitAll()
                    .anyRequest().authenticated();
            // @formatter:on
        }
    }
}

Konfiguration

Konfigurierbare Eigenschaften von spring-cloud-azure-starter-active-directory:

Name BESCHREIBUNG
spring.cloud.azure.active-directory.app-id-uri App-ID-URI, der im Anspruch "aud" eines id_token verwendet werden kann.
spring.cloud.azure.active-directory.application-type Typ der Azure AD-Anwendung.
spring.cloud.azure.active-directory.authenticate-additional-parameters Fügen Sie der Autorisierungs-URL zusätzliche Parameter hinzu.
spring.cloud.azure.active-directory.authorization-clients Die OAuth2-Autorisierungsclients.
spring.cloud.azure.active-directory.credential.client-id Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.active-directory.credential.client-secret Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.active-directory.jwk-set-cache-lebensdauer Die Lebensdauer des zwischengespeicherten JWK-Satzes, bevor er abläuft, beträgt die Standardeinstellung 5 Minuten.
spring.cloud.azure.active-directory.jwk-set-cache-refresh-time Die Aktualisierungszeit des zwischengespeicherten JWK-Satzes, bevor es abläuft, beträgt die Standardeinstellung 5 Minuten.
spring.cloud.azure.active-directory.jwt-connect-timeout Verbindungstimeout für den JWKSet-Remote-URL-Aufruf.
spring.cloud.azure.active-directory.jwt-read-timeout Timeout für den JWKSet-Remote-URL-Aufruf lesen.
spring.cloud.azure.active-directory.jwt-size-limit Größenbeschränkung in Bytes des JWKSet-Remote-URL-Aufrufs.
spring.cloud.azure.active-directory.post-logout-redirect-uri Der Umleitungs-URI nach dem Abmelden.
spring.cloud.azure.active-directory.profile.cloud-type Name der Azure-Cloud, mit der eine Verbindung hergestellt werden soll. Unterstützte Typen sind: AZURE, AZURE_CHINA, AZURE_GERMANY, AZURE_US_GOVERNMENT, OTHER.
spring.cloud.azure.active-directory.profile.environment Eigenschaften für Azure Active Directory-Endpunkte.
spring.cloud.azure.active-directory.profile.tenant-id Azure-Mandanten-ID.
spring.cloud.azure.active-directory.redirect-uri-template Umleitungsendpunkt: Wird vom Autorisierungsserver verwendet, um Antworten zurückzugeben, die Autorisierungsanmeldeinformationen für den Client über den Benutzer-Agent des Ressourcenbesitzers enthalten. Der Standardwert ist {baseUrl}/login/oauth2/code/.
spring.cloud.azure.active-directory.resource-server.claim-to-authority-prefix-map Konfigurieren Sie, welche Anspruch verwendet wird, um "GrantedAuthority" zu erstellen und das Präfix des Zeichenfolgenwerts "GrantedAuthority" festzulegen. Standardwert ist: "scp" -> "SCOPE_", "rollen" -> "APPROLE_".
spring.cloud.azure.active-directory.resource-server.principal-claim-name Konfigurieren Sie, welche Ansprüche im Zugriffstoken in authenticatedPrincipal#getName zurückgegeben werden. Standardwert ist "sub".
spring.cloud.azure.active-directory.session-stateless Wenn true den zustandslosen AadAppRoleStatelessAuthenticationFilter aktiviert. Der Standardwert ist false, der AadAuthenticationFilter aktiviert.
spring.cloud.azure.active-directory.user-group.allowed-group-ids Die Gruppen-IDs können verwendet werden, um "GrantedAuthority" zu erstellen.
spring.cloud.azure.active-directory.user-group.allowed-group-names Die Gruppennamen können zum Erstellen von "GrantedAuthority" verwendet werden.
spring.cloud.azure.active-directory.user-group.use-transitive-members Wenn "true", verwenden Sie "v1.0/me/transitiveMemberOf", um Mitglieder abzurufen. Verwenden Sie andernfalls "v1.0/me/memberOf". Der Standardwert ist false.
spring.cloud.azure.active-directory.user-name-attribute Entscheiden Sie, welcher Anspruch der Name des Prinzipals sein soll.

Hier sind einige Beispiele für die Verwendung dieser Eigenschaften:

Anwendungstyp

THe-Anwendungstyp kann von den Abhängigkeiten abgeleitet werden: spring-security-oauth2-client oder spring-security-oauth2-resource-server. Wenn der abgeleitete Wert nicht der gewünschte Wert ist, können Sie den Anwendungstyp angeben. Hier ist die Tabelle über gültige Werte und abgeleitete Werte:

Anwendungstyp von spring-cloud-azure-starter-active-directory:

Weist eine Abhängigkeit auf: spring-security-oauth2-client Weist eine Abhängigkeit auf: spring-security-oauth2-resource-server Gültige Werte für den Anwendungstyp Verzögerter Wert
Ja Nein web_application web_application
Nein Ja resource_server resource_server
Ja Ja web_application, resource_server, resource_server_with_obo, web_application_and_resource_server resource_server_with_obo

Spring Security mit Azure Active Directory B2C

Azure Active Directory (Azure AD) B2C ist ein Identitätsverwaltungsdienst, mit dem Sie die Kundenregistrierung und -anmeldung anpassen und steuern sowie Profile bei der Verwendung Ihrer Anwendungen verwalten können. Azure AD B2C ermöglicht diese Aktionen und schützt gleichzeitig die Identitäten Ihrer Kunden.

Einrichten von Abhängigkeiten

<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId>
    </dependency>
</dependencies>

Konfiguration

Konfigurierbare Eigenschaften von spring-cloud-azure-starter-active-directory-b2c:

Name BESCHREIBUNG
spring.cloud.azure.active-directory.b2c.app-id-uri App-ID-URI, der möglicherweise im Anspruch "aud" eines Tokens verwendet werden kann.
spring.cloud.azure.active-directory.b2c.authenticate-additional-parameters Zusätzliche Parameter für die Authentifizierung.
spring.cloud.azure.active-directory.b2c.authorization-clients Geben Sie die Clientkonfiguration an.
spring.cloud.azure.active-directory.b2c.base-uri Azure AD B2C-Endpunktbasis-URI.
spring.cloud.azure.active-directory.b2c.credential Azure AD B2C-Anmeldeinformationen.
spring.cloud.azure.active-directory.b2c.jwt-connect-timeout Verbindungstimeout für den JWKSet-Remote-URL-Aufruf.
spring.cloud.azure.active-directory.b2c.jwt-read-timeout Timeout für den JWKSet-Remote-URL-Aufruf lesen.
spring.cloud.azure.active-directory.b2c.jwt-size-limit Größenbeschränkung in Bytes des JWKSet-Remote-URL-Aufrufs.
spring.cloud.azure.active-directory.b2c.login-flow Geben Sie den primären Anmeldeflussschlüssel an. Der Standardwert ist sign-up-or-sign-in.
spring.cloud.azure.active-directory.b2c.logout-success-url Umleitungs-URL nach dem Abmelden. Der Standardwert ist http://localhost:8080/login.
spring.cloud.azure.active-directory.b2c.profile Azure AD B2C-Profilinformationen.
spring.cloud.azure.active-directory.b2c.reply-url Antwort-URL nach dem Abrufen von Autorisierungscode. Der Standardwert ist {baseUrl}/login/oauth2/code/.
spring.cloud.azure.active-directory.b2c.user-flows Benutzerflüsse.
spring.cloud.azure.active-directory.b2c.user-name-attribute-name-name Name des Benutzernamen-Attributs.

Überprüfen Sie für vollständige Konfigurationen die Seite "Anhang".

Grundlegende Verwendung

Eine Webanwendung ist jede webbasierte Anwendung, die es Benutzern ermöglicht, sich bei Azure AD anzumelden, während ein Ressourcenserver entweder den Zugriff akzeptiert oder verweigert, nachdem access_token von Azure AD abgerufen wurden. In diesem Leitfaden werden 4 Szenarien behandelt:

  1. Zugreifen auf eine Webanwendung.

  2. Webanwendung, die auf Ressourcenserver zugreift.

  3. Zugreifen auf einen Ressourcenserver.

  4. Ressourcenserver, der auf andere Ressourcenserver zugreift.

Systemdiagramm der Webanwendungsinteraktion mit Azure AD- und Ressourcenservern.

Verwendung 1: Zugreifen auf eine Webanwendung

Dieses Szenario verwendet den OAuth 2.0-Autorisierungscode-Autorisierungscodefluss , um sich bei Ihrem Azure AD B2C-Benutzer anzumelden.

  1. Wählen Sie im Portalmenü Azure AD B2C aus, und klicken Sie auf Anwendungen und dann auf Hinzufügen.

  2. Geben Sie Ihren Anwendungsnamen an, nennen wir ihnwebapp, fügen Sie für die Antwort-URL hinzuhttp://localhost:8080/login/oauth2/code/, notieren Sie die Anwendungs-ID als IhreWEB_APP_AZURE_CLIENT_ID, und klicken Sie dann auf "Speichern".

  3. Wählen Sie in Ihrer Anwendung Schlüssel aus, klicken Sie zum Generieren von WEB_APP_AZURE_CLIENT_SECRET auf Schlüssel generieren, und klicken Sie dann auf Speichern.

  4. Wählen Sie "Benutzerflüsse " links aus, und klicken Sie dann auf "Neuer Benutzerfluss".

  5. Wählen Sie Registrieren und Anmelden, Profilbearbeitung und Kennwortzurücksetzung aus, um entsprechende Benutzerflows zu erstellen. Geben Sie unter Name einen Namen für den Benutzerflow und unter Benutzerattribute und Ansprüche die entsprechenden Werte ein, und klicken Sie auf Erstellen.

  6. Wählen Sie API-BerechtigungenHinzufügen einer Berechtigung>Microsoft-APIs>, wählen Sie Microsoft Graph aus, wählen Sie delegierte Berechtigungen aus, überprüfen Sie offline_access und openid-Berechtigungen, wählen Sie "Berechtigung hinzufügen" aus, um den Vorgang abzuschließen.

  7. Erteilen der Administratorzustimmung für Graph-Berechtigungen .

    Azure-Portal Screenshot mit dem Bildschirm

  8. Fügen Sie die folgenden Abhängigkeiten in Ihrem pom.xmlhinzu.

    <dependencies>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>azure-spring-boot-starter-active-directory-b2c</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>
    </dependencies>
    
  9. Fügen Sie Eigenschaften in application.yml mithilfe der werte hinzu, die Sie zuvor erstellt haben, z. B.:

    spring:
      cloud:
        azure:
          active-directory:
            b2c:
              authenticate-additional-parameters:
                domain_hint: xxxxxxxxx         # optional
                login_hint: xxxxxxxxx          # optional
                prompt: [login,none,consent]   # optional
              base-uri: ${BASE_URI}
              credential:
                client-id: ${WEBAPP_AZURE_CLIENT_ID}
                client-secret: ${WEBAPP_AZURE_CLIENT_SECRET}
              login-flow: ${LOGIN_USER_FLOW_KEY}               # default to sign-up-or-sign-in, will look up the user-flows map with provided key.
              logout-success-url: ${LOGOUT_SUCCESS_URL}
              user-flows:
                ${YOUR_USER_FLOW_KEY}: ${USER_FLOW_NAME}
              user-name-attribute-name: ${USER_NAME_ATTRIBUTE_NAME}
    
  10. Schreiben Sie Ihren Java-Code.

    Der Controllercode kann auf Folgendes verweisen:

    @Controller
    public class WebController {
    
        private void initializeModel(Model model, OAuth2AuthenticationToken token) {
            if (token != null) {
                final OAuth2User user = token.getPrincipal();
                model.addAllAttributes(user.getAttributes());
                model.addAttribute("grant_type", user.getAuthorities());
                model.addAttribute("name", user.getName());
            }
        }
    
        @GetMapping(value = { "/", "/home" })
        public String index(Model model, OAuth2AuthenticationToken token) {
            initializeModel(model, token);
            return "home";
        }
    }
    

    Der Sicherheitskonfigurationscode kann auf Folgendes verweisen:

    @EnableWebSecurity
    public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        private final AadB2cOidcLoginConfigurer configurer;
    
        public WebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer) {
            this.configurer == configurer;
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // @formatter:off
            http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                .apply(configurer);
            // @formatter:off
        }
    }
    

    Kopieren Sie die home.html aus einem Beispiel für aad-b2c-Webanwendung, und ersetzen Sie den PROFILE_EDIT_USER_FLOWPASSWORD_RESET_USER_FLOW zuvor abgeschlossenen Benutzerflussnamen.

  11. Erstellen und Testen der App

    Lassen Sie den Webapp Anschluss 8080 ausführen.

  12. Nachdem Ihre Anwendung durch Maven erstellt und gestartet wurde, öffnen Sie http://localhost:8080/ in einem Webbrowser. Daraufhin sollten Sie zur Anmeldeseite weitergeleitet werden.

  13. Klicken Sie auf link mit dem Anmeldebenutzerfluss, Sie sollten Azure AD B2C umgeleitet werden, um den Authentifizierungsprozess zu starten.

  14. Nachdem Sie sich erfolgreich angemeldet haben, sollten Sie das Beispiel home page aus dem Browser sehen.

Verwendung 2: Webanwendung, die auf Ressourcenserver zugreift

Dieses Szenario basiert auf dem Zugriff auf ein Webanwendungsszenario , um der Anwendung den Zugriff auf andere Ressourcen zu ermöglichen, also der OAuth 2.0-Clientanmeldeinformationen-Genehmigungsfluss .

  1. Wählen Sie im Portalmenü Azure AD B2C aus, und klicken Sie auf Anwendungen und dann auf Hinzufügen.

  2. Geben Sie Ihren Anwendungsnamen an, rufen wir ihn webApiAauf, notieren Sie die Anwendungs-ID als Ihre WEB_API_A_AZURE_CLIENT_ID , und klicken Sie dann auf "Speichern".

  3. Wählen Sie in Ihrer Anwendung Schlüssel aus, klicken Sie zum Generieren von WEB_API_A_AZURE_CLIENT_SECRET auf Schlüssel generieren, und klicken Sie dann auf Speichern.

  4. Wählen Sie eine API auf der linken Seite verfügbar, und klicken Sie dann auf den Link " Festlegen ", notieren Sie den Anwendungs-ID-URI als Ihre WEB_API_A_APP_ID_URL, und speichern Sie dann.

  5. Wählen Sie "Manifest" auf der linken Seite aus, und fügen Sie dann das folgende JSON-Segment in appRoles ein Array ein, notieren Sie den Anwendungs-ID-URI als Ihren WEB_API_A_APP_ID_URL, notieren Sie den Wert der App-Rolle als Ihre WEB_API_A_ROLE_VALUEund speichern Sie.

    {
      "allowedMemberTypes": [
        "Application"
      ],
      "description": "WebApiA.SampleScope",
      "displayName": "WebApiA.SampleScope",
      "id": "04989db0-3efe-4db6-b716-ae378517d2b7",
      "isEnabled": true,
      "value": "WebApiA.SampleScope"
    }
    

    Azure-Portal Screenshot des Anwendungsmanifestbildschirms mit hervorgehobener JSON-Datei

  6. Wählen Sie API-Berechtigungen>Add a permission>My APIs, select WebApiA application name, select Application Permissions, select WebApiA.SampleScope permission, select Add permission to complete the process.

  7. Erteilen der Administratorzustimmung für WebApiA-Berechtigungen .

    Azure-Portal Screenshot mit dem Bildschirm

  8. Fügen Sie die folgende Abhängigkeit basierend auf dem Zugriff auf ein Webanwendungsszenario hinzu.

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
  9. Fügen Sie die folgende Konfiguration auf der Grundlage des Zugriffs auf ein Webanwendungsszenario hinzu.

        spring:
          cloud:
            azure:
              active-directory:
                b2c:
                  base-uri: ${BASE_URI}             # Such as: https://xxxxb2c.b2clogin.com
                  profile:
                    tenant-id: ${AZURE_TENANT_ID}
                  authorization-clients:
                    ${RESOURCE_SERVER_A_NAME}:
                      authorization-grant-type: client_credentials
                      scopes: ${WEB_API_A_APP_ID_URL}/.default
    
  10. Schreiben Sie Ihren Webapp Java-Code.

    Der Controllercode kann auf Folgendes verweisen:

    class Demo {
        /**
         * Access to protected data from Webapp to WebApiA through client credential flow. The access token is obtained by webclient, or
         * <p>@RegisteredOAuth2AuthorizedClient("webApiA")</p>. In the end, these two approaches will be executed to
         * DefaultOAuth2AuthorizedClientManager#authorize method, get the access token.
         *
         * @return Respond to protected data from WebApi A.
         */
        @GetMapping("/webapp/webApiA")
        public String callWebApiA() {
            String body = webClient
                .get()
                .uri(LOCAL_WEB_API_A_SAMPLE_ENDPOINT)
                .attributes(clientRegistrationId("webApiA"))
                .retrieve()
                .bodyToMono(String.class)
                .block();
            LOGGER.info("Call callWebApiA(), request '/webApiA/sample' returned: {}", body);
            return "Request '/webApiA/sample'(WebApi A) returned a " + (body != null ? "success." : "failure.");
        }
    }
    

    Der Sicherheitskonfigurationscode ist identisch mit dem Zugreifen auf ein Webanwendungsszenario , ein weiterer Ann webClient wird wie folgt hinzugefügt:

    public class SampleConfiguration {
        @Bean
        public WebClient webClient(OAuth2AuthorizedClientManager oAuth2AuthorizedClientManager) {
            ServletOAuth2AuthorizedClientExchangeFilterFunction function =
                new ServletOAuth2AuthorizedClientExchangeFilterFunction(oAuth2AuthorizedClientManager);
            return WebClient.builder()
                            .apply(function.oauth2Configuration())
                            .build();
        }
    }
    
  11. Weitere Informationen finden Sie im Abschnitt "Zugreifen auf einen Ressourcenserver ", um Ihren WebApiA Java-Code zu schreiben.

  12. Erstellen und Testen der App

    Lassen Sie Webapp den Port 8080 und 8081 entsprechend ausführen und WebApiA ausführen. Starten Webapp und WebApiA Anwenden, kehren Sie nach der erfolgreichen Protokollierung zur Startseite zurück, sie können darauf zugreifen http://localhost:8080/webapp/webApiA , um die WebApiA-Ressourcenantwort abzurufen.

Verwendung 3: Zugreifen auf einen Ressourcenserver

Dieses Szenario unterstützt keine Anmeldung. Schützen Sie einfach den Server, indem Sie das Zugriffstoken überprüfen und falls gültig, die Anforderung angibt.

  1. Weitere Informationen finden Sie unter Verwendung 2: Webanwendung, die auf Ressourcenserver zugreift , um Ihre WebApiA Berechtigung zu erstellen.

  2. Hinzufügen von WebApiA Berechtigungen und Erteilen der Administratorzustimmung für Ihre Webanwendung.

  3. Fügen Sie die folgenden Abhängigkeiten in Ihrem pom.xmlhinzu.

    <dependencies>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>azure-spring-boot-starter-active-directory-b2c</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
  4. Fügen Sie die folgende Konfiguration hinzu.

        spring:
          cloud:
            azure:
              active-directory:
                b2c:
                  base-uri: ${BASE_URI}             # Such as: https://xxxxb2c.b2clogin.com
                  profile:
                    tenant-id: ${AZURE_TENANT_ID}
                  app-id-uri: ${APP_ID_URI}         # If you're using v1.0 token, configure app-id-uri for `aud` verification
                  credential:
                    client-id: ${AZURE_CLIENT_ID}           # If you're using v2.0 token, configure client-id for `aud` verification
    
  5. Schreiben Sie Ihren Java-Code.

    Der Controllercode kann auf Folgendes verweisen:

    class Demo {
        /**
         * webApiA resource api for web app
         * @return test content
         */
        @PreAuthorize("hasAuthority('APPROLE_WebApiA.SampleScope')")
        @GetMapping("/webApiA/sample")
        public String webApiASample() {
            LOGGER.info("Call webApiASample()");
            return "Request '/webApiA/sample'(WebApi A) returned successfully.";
        }
    }
    

    Der Sicherheitskonfigurationscode kann auf Folgendes verweisen:

    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class ResourceServerConfiguration extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests((requests) -> requests.anyRequest().authenticated())
                .oauth2ResourceServer()
                .jwt()
                .jwtAuthenticationConverter(new AadJwtBearerTokenAuthenticationConverter());
        }
    }
    
  6. Erstellen und Testen der App

    Lassen Sie den WebApiA Anschluss 8081 ausführen. Rufen Sie das Zugriffstoken für webApiA Ressource und Zugriff http://localhost:8081/webApiA/sample als Bearer-Autorisierungsheader ab.

Verwendung 4: Ressourcenserver, der auf andere Ressourcenserver zugreift

Dieses Szenario ist ein Upgrade des Zugriffs auf einen Ressourcenserver, unterstützt den Zugriff auf andere Anwendungsressourcen basierend auf dem OAuth2-Clientanmeldeinformationenfluss.

  1. In Bezug auf die vorherigen Schritte erstellen wir eine WebApiB Anwendung und machen eine Anwendungsberechtigung WebApiB.SampleScopeverfügbar.

    {
        "allowedMemberTypes": [
            "Application"
        ],
        "description": "WebApiB.SampleScope",
        "displayName": "WebApiB.SampleScope",
        "id": "04989db0-3efe-4db6-b716-ae378517d2b7",
        "isEnabled": true,
        "lang": null,
        "origin": "Application",
        "value": "WebApiB.SampleScope"
    }
    

    Azure-Portal Screenshot des Manifestbildschirms

  2. Erteilen der Administratorzustimmung für WebApiB-Berechtigungen .

    Azure-Portal Screenshot mit dem Bildschirm

  3. Fügen Sie auf der Grundlage des Zugriffs auf einen Ressourcenserver eine Abhängigkeit in Ihrem pom.xmlhinzu.

    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    
  4. Fügen Sie die folgende Konfiguration basierend auf der Konfiguration eines Ressourcenserverszenarios hinzu.

        spring:
          cloud:
            azure:
              active-directory:
                b2c:
                  credential:
                    client-secret: ${WEB_API_A_AZURE_CLIENT_SECRET}
                  authorization-clients:
                    ${RESOURCE_SERVER_B_NAME}:
                      authorization-grant-type: client_credentials
                      scopes: ${WEB_API_B_APP_ID_URL}/.default
    
  5. Schreiben Sie Ihren Java-Code.

    WebApiA-Controllercode kann auf Folgendes verweisen:

    public class SampleController {
        /**
         * Access to protected data from WebApiA to WebApiB through client credential flow. The access token is obtained by webclient, or
         * <p>@RegisteredOAuth2AuthorizedClient("webApiA")</p>. In the end, these two approaches will be executed to
         * DefaultOAuth2AuthorizedClientManager#authorize method, get the access token.
         *
         * @return Respond to protected data from WebApi B.
         */
        @GetMapping("/webApiA/webApiB/sample")
        @PreAuthorize("hasAuthority('APPROLE_WebApiA.SampleScope')")
        public String callWebApiB() {
            String body = webClient
                .get()
                .uri(LOCAL_WEB_API_B_SAMPLE_ENDPOINT)
                .attributes(clientRegistrationId("webApiB"))
                .retrieve()
                .bodyToMono(String.class)
                .block();
            LOGGER.info("Call callWebApiB(), request '/webApiB/sample' returned: {}", body);
            return "Request 'webApiA/webApiB/sample'(WebApi A) returned a " + (body != null ? "success." : "failure.");
        }
    }
    

    WebApiB-Controllercode kann auf Folgendes verweisen:

    public class SampleController {
        /**
         * webApiB resource api for other web application
         * @return test content
         */
        @PreAuthorize("hasAuthority('APPROLE_WebApiB.SampleScope')")
        @GetMapping("/webApiB/sample")
        public String webApiBSample() {
            LOGGER.info("Call webApiBSample()");
            return "Request '/webApiB/sample'(WebApi B) returned successfully.";
        }
    }
    

    Der Sicherheitskonfigurationscode ist mit dem Zugreifen auf ein Ressourcenserverszenario identisch, es wird wie folgt eine weitere Zeichenfolge webClient hinzugefügt:

    public class SampleConfiguration {
        @Bean
        public WebClient webClient(OAuth2AuthorizedClientManager oAuth2AuthorizedClientManager) {
            ServletOAuth2AuthorizedClientExchangeFilterFunction function =
                new ServletOAuth2AuthorizedClientExchangeFilterFunction(oAuth2AuthorizedClientManager);
            return WebClient.builder()
                            .apply(function.oauth2Configuration())
                            .build();
        }
    }
    
  6. Erstellen und Testen der App

    Lassen Sie WebApiA den Port 8081 und 8082 bzw. port 8082 ausführen und WebApiB ausführen. Starten WebApiA und WebApiB Anwenden, rufen Sie das Zugriffstoken für webApiA Ressource und Zugriff http://localhost:8081/webApiA/webApiB/sample als Bearer-Autorisierungsheader ab.

Beispiele

Weitere Details finden Sie in spring-cloud-azure-starter-active-directory-b2c-Beispielen .

Unterstützung für die Frühjahrsintegration

Spring Integration Extension für Azure stellt Spring Integration Adapter für die verschiedenen Dienste bereit, die vom Azure SDK für Java bereitgestellt werden. Wir bieten Unterstützung für die Frühjahrsintegration für diese Azure-Dienste: Event Hubs, Service Bus, Storage Queue. Nachfolgend sehen Sie eine Liste der unterstützten Adapter:

Frühjahrsintegration mit Azure Event Hubs

Wichtige Begriffe

Bei Azure Event Hubs handelt es sich um eine Big Data-Streamingplattform und einen Ereigniserfassungsdienst. Mit diesem Dienst können Millionen von Ereignissen pro Sekunde empfangen und verarbeitet werden. An einen Event Hub gesendete Daten können transformiert und mit einem beliebigen Echtzeitanalyse-Anbieter oder Batchverarbeitungs-/Speicheradapter gespeichert werden.

Die Spring-Integration ermöglicht einfaches Messaging in Spring-basierten Anwendungen und unterstützt die Integration mit externen Systemen über deklarative Adapter. Diese Adapter bieten eine höhere Abstraktionsebene über die Unterstützung von Spring für Remoting, Messaging und Planung. Das Erweiterungsprojekt Spring Integration für Event Hubs stellt eingehende und ausgehende Kanaladapter und Gateways für Azure Event Hubs bereit.

Hinweis

RxJava-Support-APIs werden von Version 4.0.0 gelöscht. Ausführliche Informationen finden Sie unter Javadoc.

Consumergruppe

Event Hubs bietet ähnliche Unterstützung von Consumergruppen wie Apache Kafka, aber mit geringfügig unterschiedlicher Logik. Während Kafka alle engagierten Offsets im Broker speichert, müssen Sie Offsets von Event Hubs-Nachrichten speichern, die manuell verarbeitet werden. Event Hubs SDK bietet die Funktion zum Speichern solcher Offsets in Azure Storage.

Unterstützung der Partitionierung

Event Hubs bietet ein ähnliches Konzept der physischen Partition wie Kafka. Im Gegensatz zu Kafkas automatischer Neuausgleich zwischen Verbrauchern und Partitionen bietet Event Hubs jedoch eine Art voreingestellten Modus. Das Speicherkonto fungiert als Lease, um zu bestimmen, welche Partition dem Verbraucher gehört. Wenn ein neuer Verbraucher beginnt, wird versucht, einige Partitionen von den meisten schwer geladenen Verbrauchern zu stehlen, um den Workloadausgleich zu erreichen.

Um die Lastenausgleichsstrategie anzugeben, können Entwickler für die Konfiguration verwenden EventHubsContainerProperties . Ein Beispiel für die Konfiguration EventHubsContainerPropertiesfinden Sie im folgenden Abschnitt.

Batch-Consumerunterstützung

Dies EventHubsInboundChannelAdapter unterstützt den batchaufwendigen Modus. Um es zu aktivieren, können Benutzer den Listenermodus als ListenerMode.BATCH beim Erstellen einer EventHubsInboundChannelAdapter Instanz angeben. Wenn dies aktiviert ist, wird eine Nachricht , von der die Nutzlast eine Liste von Batchereignissen ist, empfangen und an den nachgelagerten Kanal übergeben. Jeder Nachrichtenkopf wird auch als Liste konvertiert, von der der Inhalt der zugeordnete Headerwert aus jedem Ereignis analysiert wird. Für die kommunalen Header der Partitions-ID, Prüfpunkter und letzten enqueuierten Eigenschaften werden sie als einzelner Wert für den gesamten Batch von Ereignissen freigegeben. Weitere Details finden Sie unter Ereignishubs-Nachrichtenkopfzeilen .

Hinweis

Der Prüfpunktheader ist nur vorhanden, wenn der MANUELL-Prüfpunktmodus verwendet wird.

Die Prüfung des Batch-Verbrauchers unterstützt zwei Modi: BATCH und MANUAL. BATCH der Modus ist ein automatischer Prüfmodus, um den gesamten Batch von Ereignissen zusammen zu überwachen, sobald sie empfangen werden. MANUAL der Modus besteht darin, die Ereignisse von Benutzern zu prüfen. Wenn der Prüfpunkt verwendet wird, wird der Prüfpunkt in den Nachrichtenheader übergeben, und Benutzer können es verwenden, um die Prüfprüfung zu erledigen.

Die Batchaufwendungsrichtlinie kann durch Eigenschaften und max-sizemax-wait-time, bei denen max-size eine erforderliche Eigenschaft vorhanden ist, angegeben werden, während max-wait-time optional ist. Um die Batchnutzungsstrategie anzugeben, können Entwickler für die Konfiguration verwenden EventHubsContainerProperties . Im folgenden Abschnitt finden Sie ein Beispiel für die Konfiguration EventHubsContainerPropertiesvon .

Setup für Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-integration-eventhubs</artifactId>
</dependency>

Konfiguration

Dieser Start stellt die folgenden drei Komponenten der Konfigurationsoptionen bereit:

Verbindungskonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen, die zum Herstellen einer Verbindung mit Azure Event Hubs verwendet werden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, finden Sie unter Autorisieren des Zugriffs mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Verbindung konfigurierbare Eigenschaften von spring-cloud-azure-starter-integration-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.eventhubs.enabled boolean Ob ein Azure Event Hubs aktiviert ist.
spring.cloud.azure.eventhubs.connection-string String Ereignishubs-Namespace-Verbindungszeichenfolgenwert.
spring.cloud.azure.eventhubs.namespace String Event Hubs-Namespacewert, der das Präfix des FQDN ist. Ein FQDN sollte aus NamespaceName.DomainName bestehen.
spring.cloud.azure.eventhubs.domain-name String Domänenname eines Azure Event Hubs Namespacewerts.
spring.cloud.azure.eventhubs.custom-endpoint-address String Benutzerdefinierte Endpunktadresse.
spring.cloud.azure.eventhubs.shared-connection Boolean Ob der zugrunde liegende EventProcessorClient und EventHubProducerAsyncClient dieselbe Verbindung verwenden. Standardmäßig wird eine neue Verbindung erstellt und für jeden Event Hub-Client erstellt.
Prüfpunktkonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen für den Speicher-Blobs-Dienst, der zum Beibehalten der Partitionsbesitz- und Prüfpunktinformationen verwendet wird.

Hinweis

Wenn die Eigenschaft spring.cloud.azure.eventhubs.processor.checkpoint-store.create-container-if-not-exists manuell aktiviert ist, wird kein Speichercontainer automatisch erstellt.

Prüfpunkt konfigurierbarer Eigenschaften von spring-cloud-azure-starter-integration-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.eventhubs.processor.checkpoint-store.create-container-if-not-exists Boolean Ob das Erstellen von Containern zulässig ist, falls nicht vorhanden.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name String Name für das Speicherkonto.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key String Zugriffsschlüssel für das Speicherkonto
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name String Speichercontainername.

Allgemeine Azure Service SDK-Konfigurationsoptionen sind auch für den Speicher-Blob-Prüfpunktspeicher konfigurierbar. Die unterstützten Konfigurationsoptionen werden auf der Konfigurationsseite eingeführt und können entweder mit dem einheitlichen Präfix spring.cloud.azure. oder dem Präfix spring.cloud.azure.eventhubs.processor.checkpoint-storekonfiguriert werden.

Konfigurationseigenschaften des Ereignishub-Prozessors

Mit EventHubsInboundChannelAdapter der Verwendung von EventProcessorClient Nachrichten aus einem Ereignishub können EventHubsContainerProperties Entwickler die Gesamteigenschaften eines EventProcessorClientEreignishubs konfigurieren. Im folgenden Abschnitt finden Sie informationen zum Arbeiten mit EventHubsInboundChannelAdapter.

Grundlegende Verwendung

Senden von Nachrichten an Azure Event Hubs
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              eventhubs:
                connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
                processor:
                  checkpoint-store:
                    container-name: ${CHECKPOINT-CONTAINER}
                    account-name: ${CHECKPOINT-STORAGE-ACCOUNT}
                    account-key: ${CHECKPOINT-ACCESS-KEY}
    
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identitäten die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                managed-identity-enabled: true
                client-id: ${AZURE_CLIENT_ID}
              eventhubs:
                namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
                processor:
                  checkpoint-store:
                    container-name: ${CONTAINER_NAME}
                    account-name: ${ACCOUNT_NAME}
    
    • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                client-id: ${AZURE_CLIENT_ID}
                client-secret: ${AZURE_CLIENT_SECRET}
              profile:
                tenant-id: ${AZURE_TENANT_ID}
              eventhubs:
                namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
                processor:
                  checkpoint-store:
                    container-name: ${CONTAINER_NAME}
                    account-name: ${ACCOUNT_NAME}
    
  2. Erstellen Sie DefaultMessageHandler mit der Anan des Sendens von EventHubsTemplate Nachrichten an Event Hubs.

    class Demo {
        private static final String OUTPUT_CHANNEL = "output";
        private static final String EVENTHUB_NAME = "eh1";
    
        @Bean
        @ServiceActivator(inputChannel = OUTPUT_CHANNEL)
        public MessageHandler messageSender(EventHubsTemplate eventHubsTemplate) {
            DefaultMessageHandler handler = new DefaultMessageHandler(EVENTHUB_NAME, eventHubsTemplate);
            handler.setSendCallback(new ListenableFutureCallback<Void>() {
                @Override
                public void onSuccess(Void result) {
                    LOGGER.info("Message was sent successfully.");
                }
                @Override
                public void onFailure(Throwable ex) {
                    LOGGER.error("There was an error sending the message.", ex);
                }
            });
            return handler;
        }
    }
    
  3. Erstellen Sie eine Nachrichtengatewaybindung mit dem obigen Nachrichtenhandler über einen Nachrichtenkanal.

    class Demo {
        @Autowired
        EventHubOutboundGateway messagingGateway;
    
        @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL)
        public interface EventHubOutboundGateway {
            void send(String text);
        }
    }
    
  4. Senden Sie Nachrichten mithilfe des Gateways.

    class Demo {
        public void demo() {
            this.messagingGateway.send(message);
        }
    }
    
Empfangen von Nachrichten aus Azure Event Hubs
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

  2. Erstellen Sie eine Beannung des Nachrichtenkanals als Eingabekanal.

    @Configuration
    class Demo {
        @Bean
        public MessageChannel input() {
            return new DirectChannel();
        }
    }
    
  3. Erstellen Sie EventHubsInboundChannelAdapter mit der Beannung EventHubsMessageListenerContainer , um Nachrichten von Event Hubs zu empfangen.

    @Configuration
    class Demo {
        private static final String INPUT_CHANNEL = "input";
        private static final String EVENTHUB_NAME = "eh1";
        private static final String CONSUMER_GROUP = "$Default";
    
        @Bean
        public EventHubsInboundChannelAdapter messageChannelAdapter(
                @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel,
                EventHubsMessageListenerContainer listenerContainer) {
            EventHubsInboundChannelAdapter adapter = new EventHubsInboundChannelAdapter(processorContainer);
            adapter.setOutputChannel(inputChannel);
            return adapter;
        }
    
        @Bean
        public EventHubsMessageListenerContainer messageListenerContainer(EventHubsProcessorFactory processorFactory) {
            EventHubsContainerProperties containerProperties = new EventHubsContainerProperties();
            containerProperties.setEventHubName(EVENTHUB_NAME);
            containerProperties.setConsumerGroup(CONSUMER_GROUP);
            containerProperties.setCheckpointConfig(new CheckpointConfig(CheckpointMode.MANUAL));
            return new EventHubsMessageListenerContainer(processorFactory, containerProperties);
        }
    }
    
  4. Erstellen Sie eine Nachrichtenempfängerbindung mit EventHubsInboundChannelAdapter über den zuvor erstellten Nachrichtenkanal.

    class Demo {
        @ServiceActivator(inputChannel = INPUT_CHANNEL)
        public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
            String message = new String(payload);
            LOGGER.info("New message received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(s -> LOGGER.info("Message '{}' successfully checkpointed", message))
                    .doOnError(e -> LOGGER.error("Error found", e))
                    .block();
        }
    }
    
Konfigurieren von EventHubsMessageConverter zum Anpassen von ObjectMapper

EventHubsMessageConverter wird als konfigurierbarer Bean erstellt, damit Benutzer ObjectMapper anpassen können.

Batch-Verbraucherunterstützung

Um Nachrichten aus Event Hubs in Batches zu nutzen, ähnelt das obige Beispiel, neben benutzern sollten die batchaufwendigen Konfigurationsoptionen für EventHubsInboundChannelAdapter.

Beim Erstellen EventHubsInboundChannelAdaptersollte der Listenermodus als BATCHfestgelegt werden. Legen Sie beim Erstellen der EventHubsMessageListenerContainerBeannung den Prüfpunktmodus als entweder MANUAL oder BATCHfest, und die Batchoptionen können nach Bedarf konfiguriert werden.

@Configuration
class Demo {
    private static final String INPUT_CHANNEL = "input";
    private static final String EVENTHUB_NAME = "eh1";
    private static final String CONSUMER_GROUP = "$Default";

    @Bean
    public EventHubsInboundChannelAdapter messageChannelAdapter(
            @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel,
            EventHubsMessageListenerContainer listenerContainer) {
        EventHubsInboundChannelAdapter adapter = new EventHubsInboundChannelAdapter(processorContainer, ListenerMode.BATCH);
        adapter.setOutputChannel(inputChannel);
        return adapter;
    }

    @Bean
    public EventHubsMessageListenerContainer messageListenerContainer(EventHubsProcessorFactory processorFactory) {
        EventHubsContainerProperties containerProperties = new EventHubsContainerProperties();
        containerProperties.setEventHubName(EVENTHUB_NAME);
        containerProperties.setConsumerGroup(CONSUMER_GROUP);
        containerProperties.getBatch().setMaxSize(100);
        containerProperties.setCheckpointConfig(new CheckpointConfig(CheckpointMode.MANUAL));
        return new EventHubsMessageListenerContainer(processorFactory, containerProperties);
    }
}
Ereignishubs-Nachrichtenkopfzeilen

In der folgenden Tabelle wird veranschaulicht, wie Ereignishubs-Nachrichteneigenschaften den Spring-Nachrichtenheadern zugeordnet werden. Für Azure Event Hubs wird die Nachricht als event" aufgerufen.

Zuordnung zwischen Ereignishubs-Nachrichten-/Ereigniseigenschaften und Spring message Headern im Datensatzlistenermodus:

Ereignishubs-Ereigniseigenschaften Spring Message Header-Konstanten type BESCHREIBUNG
Enqueued time EventHubsHeaders#ENQUEUED_TIME Sofort Der Sofortige, in UTC, von dem das Ereignis in der Event Hub-Partition enqueuiert wurde.
Offset EventHubsHeaders#OFFSET Long Der Offset des Ereignisses, wenn es aus der zugeordneten Event Hub-Partition empfangen wurde.
Partitionsschlüssel AzureHeaders#PARTITION_KEY String Der Partitions-Hashingschlüssel, wenn er beim ursprünglichen Veröffentlichen des Ereignisses festgelegt wurde.
Partitions-ID AzureHeaders#RAW_PARTITION_ID String Die Partitions-ID des Ereignishubs.
Sequenznummer EventHubsHeaders#SEQUENCE_NUMBER Long Die Sequenznummer, die dem Ereignis zugewiesen wurde, wenn sie in der zugeordneten Event Hub-Partition gequeuiert wurde.
Letzte Enqueued-Ereigniseigenschaften EventHubsHeaders#LAST_ENQUEUED_EVENT_PROPERTIES LastEnqueuedEventProperties Die Eigenschaften des letzten enqueuierten Ereignisses in dieser Partition.
Nicht verfügbar AzureHeaders#CHECKPOINTER Prüfpunkt Der Header für den Prüfpunkt der bestimmten Nachricht.

Benutzer können die Nachrichtenheader für die zugehörigen Informationen jedes Ereignisses analysieren. Um einen Nachrichtenheader für das Ereignis festzulegen, werden alle angepassten Kopfzeilen als Anwendungseigenschaft eines Ereignisses platziert, wobei der Header als Eigenschaftsschlüssel festgelegt wird. Wenn Ereignisse von Event Hubs empfangen werden, werden alle Anwendungseigenschaften in den Nachrichtenheader konvertiert.

Hinweis

Nachrichtenheader des Partitionsschlüssels, enqueuierte Zeit, Offset- und Sequenznummer werden nicht manuell festgelegt.

Wenn der Batch-Consumer-Modus aktiviert ist, werden die spezifischen Kopfzeilen von Batchnachrichten die folgenden aufgeführt, die eine Liste von Werten aus jedem einzelnen Event Hubs-Ereignis enthalten.

Zuordnung zwischen Ereignishubs-Nachrichten-/Ereigniseigenschaften und Springnachrichtsheadern im Batchlistenmodus:

Ereignishubs-Ereigniseigenschaften Spring Batch-Nachrichtenkopfkonstanten type BESCHREIBUNG
Enqueued time EventHubsHeaders#ENQUEUED_TIME Liste der Sofortnachrichten Liste der Sofortigen, in UTC, von der jedes Ereignis in der Event Hub-Partition enqueuiert wurde.
Offset EventHubsHeaders#OFFSET Liste der Langen Liste des Offsets jedes Ereignisses, wenn es aus der zugeordneten Event Hub-Partition empfangen wurde.
Partitionsschlüssel AzureHeaders#PARTITION_KEY Liste der Zeichenfolgen Liste der Partitions-Hashing-Schlüssel, wenn sie beim ursprünglichen Veröffentlichen jedes Ereignisses festgelegt wurde.
Sequenznummer EventHubsHeaders#SEQUENCE_NUMBER Liste der Langen Liste der Sequenznummer, die jedem Ereignis zugewiesen wurde, wenn es in der zugeordneten Event Hub-Partition enqueuiert wurde.
Systemeigenschaften EventHubsHeaders#BATCH_CONVERTED_SYSTEM_PROPERTIES Liste der Karte Liste der Systemeigenschaften jedes Ereignisses.
Anwendungseigenschaften EventHubsHeaders#BATCH_CONVERTED_APPLICATION_PROPERTIES Liste der Karte Liste der Anwendungseigenschaften jedes Ereignisses, bei denen alle angepassten Nachrichtenheader oder Ereigniseigenschaften platziert werden.

Hinweis

Wenn Nachrichten veröffentlicht werden, werden alle oben genannten Batchheader aus den Nachrichten entfernt, falls vorhanden.

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Spring-Integration in Azure Service Bus

Wichtige Begriffe

Spring Integration ermöglicht einfaches Messaging in Spring-basierten Anwendungen und unterstützt die Integration mit externen Systemen über deklarative Adapter.

Das Spring-Integrationsprojekt für Azure Service Bus Erweiterung bietet eingehende und ausgehende Kanaladapter für Azure Service Bus.

Hinweis

KompletableFuture-Support-APIs wurden von Version 2.10.0 veraltet und durch Reaktor Core von Version 4.0.0 ersetzt. Weitere Informationen finden Sie unter Javadoc.

Setup für Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-integration-servicebus</artifactId>
</dependency>

Konfiguration

Dieser Start stellt die folgenden 2 Teile der Konfigurationsoptionen bereit:

Verbindungskonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen, die zum Herstellen einer Verbindung mit Azure Service Bus verwendet werden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, finden Sie unter Autorisieren des Zugriffs mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Verbindung konfigurierbare Eigenschaften von spring-cloud-azure-starter-integration-servicebus:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.servicebus.enabled boolean Ob ein Azure Service Bus aktiviert ist.
spring.cloud.azure.servicebus.connection-string String Dienstbus-Namespace-Verbindungszeichenfolgenwert.
spring.cloud.azure.servicebus.namespace String Dienstbus-Namespacewert, der das Präfix des FQDN ist. Ein FQDN sollte aus NamespaceName.DomainName bestehen.
spring.cloud.azure.servicebus.domain-name String Domänenname eines Azure Service Bus Namespacewerts.
Konfigurationseigenschaften des Dienstbus-Prozessors

Die ServiceBusInboundChannelAdapter verwendung der zu nutzenden Nachrichten, um die ServiceBusProcessorClient Gesamteigenschaften einer ServiceBusProcessorClient, Entwickler können für die Konfiguration verwenden ServiceBusContainerProperties . Im folgenden Abschnitt finden Sie informationen zum Arbeiten mit ServiceBusInboundChannelAdapter.

Grundlegende Verwendung

Senden von Nachrichten an Azure Service Bus
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              servicebus:
                connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
    
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identitäten die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                managed-identity-enabled: true
                client-id: ${AZURE_CLIENT_ID}
              profile:
                tenant-id: ${AZURE_TENANT_ID}
              servicebus:
                namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
    
    • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in application.yml:

          spring:
            cloud:
              azure:
                credential:
                  client-id: ${AZURE_CLIENT_ID}
                  client-secret: ${AZURE_CLIENT_SECRET}
                profile:
                  tenant-id: ${AZURE_TENANT_ID}
                servicebus:
                  namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
      
  2. Erstellen Sie DefaultMessageHandler mit der Anan des Sendens von ServiceBusTemplate Nachrichten an Service Bus, legen Sie den Entitätstyp für die ServiceBusTemplate fest. In diesem Beispiel wird die Service Bus-Warteschlange als Beispiel verwendet.

    class Demo {
        private static final String OUTPUT_CHANNEL = "queue.output";
    
        @Bean
        @ServiceActivator(inputChannel = OUTPUT_CHANNEL)
        public MessageHandler queueMessageSender(ServiceBusTemplate serviceBusTemplate) {
            serviceBusTemplate.setDefaultEntityType(ServiceBusEntityType.QUEUE);
            DefaultMessageHandler handler = new DefaultMessageHandler(QUEUE_NAME, serviceBusTemplate);
            handler.setSendCallback(new ListenableFutureCallback<Void>() {
                @Override
                public void onSuccess(Void result) {
                    LOGGER.info("Message was sent successfully.");
                }
    
                @Override
                public void onFailure(Throwable ex) {
                    LOGGER.info("There was an error sending the message.");
                }
            });
    
            return handler;
        }
    }
    
  3. Erstellen Sie eine Nachrichtengatewaybindung mit dem obigen Nachrichtenhandler über einen Nachrichtenkanal.

    class Demo {
        @Autowired
        QueueOutboundGateway messagingGateway;
    
        @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL)
        public interface QueueOutboundGateway {
            void send(String text);
        }
    }
    
  4. Senden Sie Nachrichten mithilfe des Gateways.

    class Demo {
        public void demo() {
            this.messagingGateway.send(message);
        }
    }
    
Empfangen von Nachrichten aus Azure Service Bus
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

  2. Erstellen Sie eine Beannung des Nachrichtenkanals als Eingabekanal.

    @Configuration
    class Demo {
        private static final String INPUT_CHANNEL = "input";
    
        @Bean
        public MessageChannel input() {
            return new DirectChannel();
        }
    }
    
  3. Erstellen Sie ServiceBusInboundChannelAdapter mit der Beannung ServiceBusMessageListenerContainer , um Nachrichten an Service Bus zu empfangen. In diesem Beispiel wird die Service Bus-Warteschlange als Beispiel verwendet.

    @Configuration
    class Demo {
        private static final String QUEUE_NAME = "queue1";
    
        @Bean
        public ServiceBusMessageListenerContainer messageListenerContainer(ServiceBusProcessorFactory processorFactory) {
            ServiceBusContainerProperties containerProperties = new ServiceBusContainerProperties();
            containerProperties.setEntityName(QUEUE_NAME);
            containerProperties.setAutoComplete(false);
            return new ServiceBusMessageListenerContainer(processorFactory, containerProperties);
        }
    
        @Bean
        public ServiceBusInboundChannelAdapter queueMessageChannelAdapter(
            @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel,
            ServiceBusMessageListenerContainer listenerContainer) {
            ServiceBusInboundChannelAdapter adapter = new ServiceBusInboundChannelAdapter(listenerContainer);
            adapter.setOutputChannel(inputChannel);
            return adapter;
        }
    }
    
  4. Erstellen Sie eine Nachrichtenempfängerbindung mit ServiceBusInboundChannelAdapter über den zuvor erstellten Nachrichtenkanal.

    class Demo {
        @ServiceActivator(inputChannel = INPUT_CHANNEL)
        public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
            String message = new String(payload);
            LOGGER.info("New message received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(s -> LOGGER.info("Message '{}' successfully checkpointed", message))
                    .doOnError(e -> LOGGER.error("Error found", e))
                    .block();
        }
    }
    
Konfigurieren von ServiceBusMessageConverter zum Anpassen von ObjectMapper

ServiceBusMessageConverter wird als konfigurierbarer Bean erstellt, damit Benutzer ObjectMapper anpassen können.

Dienstbusnachrichtenheader

Für einige Dienstbusheader, die mehreren Spring-Headerkonstanten zugeordnet werden können, wird die Priorität verschiedener Springheader aufgelistet.

Zuordnung zwischen Dienstbusheadern und Springheadern:

Service Bus-Nachrichtenkopfzeilen und -eigenschaften Spring Message Header-Konstanten type Konfigurierbar BESCHREIBUNG
Inhaltstyp MessageHeaders#CONTENT_TYPE String Ja Der RFC2045 Content-Type-Deskriptor der Nachricht.
Korrelations-ID ServiceBusMessageHeaders#CORRELATION_ID String Ja Die Korrelations-ID der Nachricht
Meldungs-ID ServiceBusMessageHeaders#MESSAGE_ID String Ja Die Nachrichten-ID der Nachricht hat diese Kopfzeile höhere Priorität als MessageHeaders#ID.
Meldungs-ID MessageHeaders#ID UUID Ja Die Nachrichten-ID der Nachricht hat diese Kopfzeile eine geringere Priorität als ServiceBusMessageHeaders#MESSAGE_ID.
Partitionsschlüssel ServiceBusMessageHeaders#PARTITION_KEY String Ja Der Partitionsschlüssel zum Senden der Nachricht an eine partitionierte Entität.
Antworten auf MessageHeaders#REPLY_CHANNEL String Ja Die Adresse einer Entität, an die Antworten gesendet werden sollen.
Antworten auf die Sitzungs-ID ServiceBusMessageHeaders#REPLY_TO_SESSION_ID String Ja Der Eigenschaftswert "ReplyToGroupId" der Nachricht.
Geplante Zeitzeit utc ServiceBusMessageHeaders#SCHEDULED_ENQUEUE_TIME OffsetDateTime Ja Die Datumszeit, zu der die Nachricht in Service Bus enqueuiert werden soll, hat diese Kopfzeile höhere Priorität als AzureHeaders#SCHEDULED_ENQUEUE_MESSAGE.
Geplante Zeitzeit utc AzureHeaders#SCHEDULED_ENQUEUE_MESSAGE Integer Ja Die Datumszeit, zu der die Nachricht in Service Bus enqueuiert werden soll, hat diese Kopfzeile eine geringere Priorität als ServiceBusMessageHeaders#SCHEDULED_ENQUEUE_TIME.
Sitzungs-ID ServiceBusMessageHeaders#SESSION_ID String Ja Der Sitzungs-IDentifier für eine sitzungsbasierte Entität.
Gültigkeitsdauer ServiceBusMessageHeaders#TIME_TO_LIVE Duration Ja Die Dauer, bis diese Nachricht abläuft.
Beschreibung ServiceBusMessageHeaders#TO String Ja Die "to"-Adresse der Nachricht, die für zukünftige Verwendung in Routingszenarien reserviert ist und von dem Broker selbst ignoriert wird.
Subject ServiceBusMessageHeaders#SUBJECT String Ja Der Betreff für die Nachricht.
Beschreibung des Totenbuchstabens ServiceBusMessageHeaders#DEAD_LETTER_ERROR_DESCRIPTION String Nein Die Beschreibung für eine Nachricht, die totgeschreiben wurde.
Grund für einen toten Brief ServiceBusMessageHeaders#DEAD_LETTER_REASON String Nein Der Grund, aus dem eine Nachricht totschreiben wurde.
Tote Buchstabenquelle ServiceBusMessageHeaders#DEAD_LETTER_SOURCE String Nein Die Entität, in der die Nachricht totgeschreiben wurde.
Lieferanzahl ServiceBusMessageHeaders#DELIVERY_COUNT long Nein Die Anzahl der Zugestellten dieser Nachricht an Clients.
Enqueued sequence number ServiceBusMessageHeaders#ENQUEUED_SEQUENCE_NUMBER long Nein Die enqueuierte Sequenznummer, die einer Nachricht von Service Bus zugewiesen ist.
Enqueued time ServiceBusMessageHeaders#ENQUEUED_TIME OffsetDateTime Nein Die Datumszeit, zu der diese Nachricht in Service Bus enqueued wurde.
Läuft ab bei ServiceBusMessageHeaders#EXPIRES_AT OffsetDateTime Nein Datum, zu dem diese Nachricht abläuft.
Sperrtoken ServiceBusMessageHeaders#LOCK_TOKEN String Nein Das Sperrtoken für die aktuelle Nachricht.
Gesperrt bis ServiceBusMessageHeaders#LOCKED_UNTIL OffsetDateTime Nein Datum, zu dem die Sperre dieser Nachricht abläuft.
Sequenznummer ServiceBusMessageHeaders#SEQUENCE_NUMBER long Nein Die eindeutige Nummer, die einer Nachricht von Service Bus zugewiesen ist.
State ServiceBusMessageHeaders#STATE ServiceBusMessageState Nein Der Status der Nachricht, die aktiv, verzögert oder geplant sein kann.
Partitionsschlüsselunterstützung

Dieser Starter unterstützt die Dienstbuspartitionierung , indem die Einstellung des Partitionsschlüssels und der Sitzungs-ID im Nachrichtenheader zugelassen wird. In diesem Abschnitt wird erläutert, wie Sie den Partitionsschlüssel für Nachrichten festlegen.

Empfohlen: Verwenden Sie ServiceBusMessageHeaders.PARTITION_KEY als Schlüssel der Kopfzeile.

public class SampleController {
    @PostMapping("/messages")
    public ResponseEntity<String> sendMessage(@RequestParam String message) {
        LOGGER.info("Going to add message {} to Sinks.Many.", message);
        many.emitNext(MessageBuilder.withPayload(message)
                                    .setHeader(ServiceBusMessageHeaders.PARTITION_KEY, "Customize partition key")
                                    .build(), Sinks.EmitFailureHandler.FAIL_FAST);
        return ResponseEntity.ok("Sent!");
    }
}

Nicht empfohlen, derzeit aber unterstützt:AzureHeaders.PARTITION_KEY als Schlüssel der Kopfzeile.

public class SampleController {
    @PostMapping("/messages")
    public ResponseEntity<String> sendMessage(@RequestParam String message) {
        LOGGER.info("Going to add message {} to Sinks.Many.", message);
        many.emitNext(MessageBuilder.withPayload(message)
                                    .setHeader(AzureHeaders.PARTITION_KEY, "Customize partition key")
                                    .build(), Sinks.EmitFailureHandler.FAIL_FAST);
        return ResponseEntity.ok("Sent!");
    }
}

Hinweis

Wenn beide ServiceBusMessageHeaders.PARTITION_KEY und AzureHeaders.PARTITION_KEY in den Nachrichtenkopfzeilen festgelegt werden, ServiceBusMessageHeaders.PARTITION_KEY wird bevorzugt.

Session Support

In diesem Beispiel wird veranschaulicht, wie Sie die Sitzungs-ID einer Nachricht in der Anwendung manuell festlegen.

public class SampleController {
    @PostMapping("/messages")
    public ResponseEntity<String> sendMessage(@RequestParam String message) {
        LOGGER.info("Going to add message {} to Sinks.Many.", message);
        many.emitNext(MessageBuilder.withPayload(message)
                                    .setHeader(ServiceBusMessageHeaders.SESSION_ID, "Customize session ID")
                                    .build(), Sinks.EmitFailureHandler.FAIL_FAST);
        return ResponseEntity.ok("Sent!");
    }
}

Hinweis

Wenn der ServiceBusMessageHeaders.SESSION_ID Wert in den Nachrichtenkopfzeilen festgelegt ist und auch ein anderer ServiceBusMessageHeaders.PARTITION_KEY (oder AzureHeaders.PARTITION_KEY) Header festgelegt wird, wird der Wert der Sitzungs-ID schließlich verwendet, um den Wert des Partitionsschlüssels zu überschreiben.

Beispiele

Weitere Informationen finden Sie in azure-spring-boot-samples .

Frühjahrsintegration in azure Storage-Warteschlange

Wichtige Begriffe

Azure Queue Storage ist ein Dienst für die Speicherung großer Nachrichtenmengen. Sie können überall auf der Welt über authentifizierte Aufrufe mithilfe von HTTP oder HTTPS auf Nachrichten zugreifen. Eine Warteschlangennachricht kann bis zu 64 KB groß sein. Eine Warteschlange kann Millionen Nachrichten enthalten, bis die maximale Kapazität eines Speicherkontos erreicht ist. Warteschlangen werden häufig verwendet, um ein Arbeits-Backlog zur asynchronen Verarbeitung zu erstellen.

Einrichten von Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-integration-storage-queue</artifactId>
</dependency>

Konfiguration

Dieser Starter bietet die folgenden Konfigurationsoptionen:

Verbindungskonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen, die zum Herstellen einer Verbindung mit der Azure Storage-Warteschlange verwendet werden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal zum Authentifizieren und Autorisieren bei Azure Active Directory für den Zugriff auf eine Azure-Ressource verwenden möchten, lesen Sie "Autorisieren des Zugriffs mit Azure AD ", um sicherzustellen, dass dem Sicherheitsprinzipal die ausreichende Berechtigung für den Zugriff auf die Azure-Ressource gewährt wurde.

Konfigurierbare Verbindungseigenschaften von spring-cloud-azure-starter-integration-storage-queue:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.storage.queue.enabled boolean Gibt an, ob eine Azure Storage-Warteschlange aktiviert ist.
spring.cloud.azure.storage.queue.connection-string String Zeichenfolgenwert für den Speicherwarteschlangen-Namespace.
spring.cloud.azure.storage.queue.accountName String Name des Speicherwarteschlangenkontos.
spring.cloud.azure.storage.queue.accountKey String Speicherwarteschlangenkontoschlüssel.
spring.cloud.azure.storage.queue.endpoint String Endpunkt des Speicherwarteschlangendiensts.
spring.cloud.azure.storage.queue.sasToken String Sas-Token-Anmeldeinformationen
spring.cloud.azure.storage.queue.serviceVersion QueueServiceVersion QueueServiceVersion, die beim Erstellen von API-Anforderungen verwendet wird.
spring.cloud.azure.storage.queue.messageEncoding String Codierung von Nachrichten in der Warteschlange.

Grundlegende Verwendung

Senden von Nachrichten in die Azure Storage-Warteschlange
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              storage:
                queue:
                  connection-string: ${AZURE_SERVICE_BUS_CONNECTION_STRING}
    
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identitäten die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                managed-identity-enabled: true
                client-id: ${AZURE_CLIENT_ID}
              profile:
                tenant-id: ${AZURE_TENANT_ID}
              storage:
                queue:
                  namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
    
    • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                client-id: ${AZURE_CLIENT_ID}
                client-secret: ${AZURE_CLIENT_SECRET}
              profile:
                tenant-id: ${AZURE_TENANT_ID}
              storage:
                queue:
                  namespace: ${AZURE_SERVICE_BUS_NAMESPACE}
    
  2. Erstellen Sie DefaultMessageHandler mit der Anan des Sendens von StorageQueueTemplate Nachrichten an die Speicherwarteschlange.

    class Demo {
        private static final String STORAGE_QUEUE_NAME = "example";
        private static final String OUTPUT_CHANNEL = "output";
    
        @Bean
        @ServiceActivator(inputChannel = OUTPUT_CHANNEL)
        public MessageHandler messageSender(StorageQueueTemplate storageQueueTemplate) {
            DefaultMessageHandler handler = new DefaultMessageHandler(STORAGE_QUEUE_NAME, storageQueueTemplate);
            handler.setSendCallback(new ListenableFutureCallback<Void>() {
                @Override
                public void onSuccess(Void result) {
                    LOGGER.info("Message was sent successfully.");
                }
    
                @Override
                public void onFailure(Throwable ex) {
                    LOGGER.info("There was an error sending the message.");
                }
            });
            return handler;
        }
    }
    
  3. Erstellen Sie eine Nachrichtengatewaybindung mit dem obigen Nachrichtenhandler über einen Nachrichtenkanal.

    class Demo {
        @Autowired
        StorageQueueOutboundGateway storageQueueOutboundGateway;
    
        @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL)
        public interface StorageQueueOutboundGateway {
            void send(String text);
        }
    }
    
  4. Senden Sie Nachrichten mithilfe des Gateways.

    class Demo {
        public void demo() {
            this.storageQueueOutboundGateway.send(message);
        }
    }
    
Empfangen von Nachrichten aus der Azure Storage-Warteschlange
  1. Füllen Sie die Konfigurationsoptionen für Anmeldeinformationen aus.

  2. Erstellen Sie eine Beannung des Nachrichtenkanals als Eingabekanal.

    class Demo {
        private static final String INPUT_CHANNEL = "input";
    
        @Bean
        public MessageChannel input() {
            return new DirectChannel();
        }
    }
    
  3. Erstellen Sie StorageQueueMessageSource mit der Beannung des Empfangens von StorageQueueTemplate Nachrichten in der Speicherwarteschlange.

    class Demo {
        private static final String STORAGE_QUEUE_NAME = "example";
    
        @Bean
        @InboundChannelAdapter(channel = INPUT_CHANNEL, poller = @Poller(fixedDelay = "1000"))
        public StorageQueueMessageSource storageQueueMessageSource(StorageQueueTemplate storageQueueTemplate) {
            return new StorageQueueMessageSource(STORAGE_QUEUE_NAME, storageQueueTemplate);
        }
    }
    
  4. Erstellen Sie eine Nachrichtenempfängerbindung mit StorageQueueMessageSource, die im letzten Schritt über den zuvor erstellten Nachrichtenkanal erstellt wurde.

    class Demo {
        @ServiceActivator(inputChannel = INPUT_CHANNEL)
        public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
            String message = new String(payload);
            LOGGER.info("New message received: '{}'", message);
            checkpointer.success()
                .doOnError(Throwable::printStackTrace)
                .doOnSuccess(t -> LOGGER.info("Message '{}' successfully checkpointed", message))
                .block();
        }
    }
    

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Spring Cloud Stream-Support

Spring Cloud Stream ist ein Framework zum Erstellen von hoch skalierbaren ereignisgesteuerten Microservices, die mit freigegebenen Messaging-Systemen verbunden sind.

Das Framework bietet ein flexibles Programmiermodell, das auf bereits etablierten und vertrauten Spring-Idioms und bewährten Methoden basiert, einschließlich Unterstützung für beständige Pub/Sub-Semantik, Verbrauchergruppen und zustandsreiche Partitionen.

Aktuelle Bindebinderimplementierungen umfassen:

Spring Cloud Stream Binder für Azure Event Hubs

Wichtige Begriffe

Der Spring Cloud Stream Binder für Azure Event Hubs stellt die Bindungsimplementierung für das Spring Cloud Stream Framework bereit. Diese Implementierung verwendet die Spring Integration Event Hubs Channel Adapter auf der Grundlage. Aus Der Perspektive des Designs ist Event Hubs ähnlich wie Kafka. Außerdem könnte auf Ereignishubs über die Kafka-API zugegriffen werden. Wenn Ihr Projekt eine enge Abhängigkeit von der Kafka-API aufweist, können Sie den Event Hub mit Kafka-API-Beispiel ausprobieren.

Consumergruppe

Event Hubs bietet ähnliche Unterstützung von Verbrauchergruppen wie Apache Kafka, aber mit einer leichten unterschiedlichen Logik. Während Kafka alle engagierten Offsets im Broker speichert, müssen Sie Offsets von Event Hubs-Nachrichten speichern, die manuell verarbeitet werden. Event Hubs SDK bietet die Funktion zum Speichern solcher Offsets innerhalb von Azure Storage.

Unterstützung der Partitionierung

Event Hubs bietet ein ähnliches Konzept der physischen Partition wie Kafka. Im Gegensatz zu kafkas automatischer Neuausgleich zwischen Verbrauchern und Partitionen bietet Event Hubs jedoch eine Art vorbelastendes Modus. Das Speicherkonto fungiert als Lease, um zu bestimmen, welche Partition dem Verbraucher gehört. Wenn ein neuer Verbraucher beginnt, versucht es, einige Partitionen von den meisten schwer geladenen Verbrauchern zu stehlen, um den Workloadausgleich zu erreichen.

Um die Lastenausgleichsstrategie anzugeben, werden Eigenschaften spring.cloud.stream.eventhubs.bindings.<binding-name>.consumer.load-balancing.* bereitgestellt. Weitere Details finden Sie in den Verbrauchereigenschaften .

Batch-Verbraucherunterstützung

Spring Cloud Azure Stream Event Hubs-Ordner unterstützt Spring Cloud Stream Batch Consumer Feature.

Um mit dem Batch-Consumer-Modus zu arbeiten, sollte die Eigenschaft spring.cloud.stream.bindings.<binding-name>.consumer.batch-mode als truefestgelegt werden. Wenn aktiviert, wird eine Nachricht , von der die Nutzlast eine Liste der Batchereignisse ist, empfangen und an die Consumer Funktion übergeben. Jeder Nachrichtenheader wird auch als Liste konvertiert, von denen der Inhalt der zugeordnete Headerwert aus jedem Ereignis analysiert wird. Für die kommunalen Header der Partitions-ID, Prüfpunkter und letzten enqueuierten Eigenschaften werden sie als einzelner Wert für den gesamten Batch von Ereignissen freigegeben. Weitere Details finden Sie unter Ereignishubs-Nachrichtenkopfzeilen .

Hinweis

Der Prüfpunktheader ist nur vorhanden, wenn der MANUELL-Prüfpunktmodus verwendet wird.

Die Prüfung des Batch-Verbrauchers unterstützt zwei Modi: BATCH und MANUAL. BATCH der Modus ist ein automatischer Prüfmodus, um den gesamten Batch von Ereignissen zusammen zu prüfen, sobald sie vom Ordner empfangen werden. MANUAL der Modus besteht darin, die Ereignisse von Benutzern zu prüfen. Wenn der Prüfpunkt verwendet wird, wird der Prüfpunkt in den Nachrichtenheader übergeben, und Benutzer können es verwenden, um die Prüfprüfung zu erledigen.

Die Batchgröße kann durch Eigenschaften und max-sizemax-wait-time präfix als spring.cloud.stream.eventhubs.bindings.<binding-name>.consumer.batch., wobei max-size eine erforderliche Eigenschaft angegeben werden kann, während max-wait-time optional ist. Weitere Details finden Sie in den Verbrauchereigenschaften .

Setup für Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-stream-binder-eventhubs</artifactId>
</dependency>

Alternativ können Sie auch den Spring Cloud Azure Stream Event Hubs Starter verwenden, wie im folgenden Beispiel für Maven gezeigt:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-stream-eventhubs</artifactId>
</dependency>

Konfiguration

Der Ordner stellt die folgenden 3 Teile der Konfigurationsoptionen bereit:

Verbindungskonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen, die zum Herstellen einer Verbindung mit Azure Event Hubs verwendet werden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um Azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie "Autorisieren" mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Verbindung konfigurierbare Eigenschaften von spring-cloud-azure-stream-binder-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.eventhubs.enabled boolean Ob ein Azure Event Hubs aktiviert ist.
spring.cloud.azure.eventhubs.connection-string String Ereignishubs-Namespace-Verbindungszeichenfolgenwert.
spring.cloud.azure.eventhubs.namespace String Event Hubs-Namespacewert, der das Präfix des FQDN ist. Ein FQDN sollte aus NamespaceName.DomainName bestehen.
spring.cloud.azure.eventhubs.domain-name String Domänenname eines Azure Event Hubs Namespacewerts.
spring.cloud.azure.eventhubs.custom-endpoint-address String Benutzerdefinierte Endpunktadresse.

Tipp

Allgemeine Azure Service SDK-Konfigurationsoptionen können auch für den Ordner "Spring Cloud Azure Stream Event Hubs" konfiguriert werden. Die unterstützten Konfigurationsoptionen werden auf der Konfigurationsseite eingeführt und können entweder mit dem einheitlichen Präfix spring.cloud.azure. oder dem Präfix spring.cloud.azure.eventhubs.konfiguriert werden.

Der Ordner unterstützt auch Spring Could Azure Resource Manager standardmäßig. Weitere Informationen zum Abrufen der Verbindungszeichenfolge mit Sicherheitsprinzipalen, die nicht mit Data verwandten Rollen gewährt werden, finden Sie im Ressourcen-Manager-Beispiel für Details.

Prüfpunktkonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen für den Speicher-Blobs-Dienst, der zum Beibehalten der Partitionsbesitz- und Prüfpunktinformationen verwendet wird.

Hinweis

Von Version 4.0.0, wenn die Eigenschaft von spring.cloud.azure.eventhubs.processor.checkpoint-store.create-container-if-not-exists manuell aktiviert ist, wird kein Speichercontainer automatisch mit dem Namen von spring.cloud.stream.bindings.bindings.binding-name.destination erstellt.

Prüfpunkt für konfigurierbare Eigenschaften von spring-cloud-azure-stream-binder-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.eventhubs.processor.checkpoint-store.create-container-if-not-exists Boolean Ob das Erstellen von Containern zulässig ist, falls nicht vorhanden.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name String Name für das Speicherkonto.
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key String Zugriffsschlüssel für das Speicherkonto
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name String Name des Speichercontainers.

Tipp

Allgemeine Azure Service SDK-Konfigurationsoptionen sind auch für den Speicher-Blob-Prüfpunktspeicher konfigurierbar. Die unterstützten Konfigurationsoptionen werden auf der Konfigurationsseite eingeführt und können entweder mit dem einheitlichen Präfix oder dem Präfix spring.cloud.azure. von spring.cloud.azure.eventhubs.processor.checkpoint-store" konfiguriert werden.

Azure Event Hubs Eigenschaften der Bindungskonfiguration

Die folgenden Optionen sind in vier Abschnitte unterteilt: Consumer Properties, Advanced Consumer Configurations, Producer Properties and Advanced Producer Configurations.

Verbrauchereigenschaften

Diese Eigenschaften werden über EventHubsConsumerProperties.

Konfigurierbare Verbrauchereigenschaften von spring-cloud-azure-stream-binder-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.checkpoint.mode CheckpointMode Prüfpunktmodus, der verwendet wird, wenn Verbraucher entscheiden, wie Die Nachricht kontrolliert werden soll
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.checkpoint.count Integer Entscheidet die Nachrichtenmenge für jede Partition, um einen Prüfpunkt zu erledigen. Wird nur wirksam, wenn PARTITION_COUNT der Prüfpunktmodus verwendet wird.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.checkpoint.interval Duration Beschließt das Zeitintervall, um einen Prüfpunkt zu erledigen. Wird nur wirksam, wenn TIME der Prüfpunktmodus verwendet wird.
spring.cloud.stream.eventhubs.bindings.< binding-name.consumer.batch.max-size Integer Die maximale Anzahl von Ereignissen in einem Batch. Erforderlich für den Batch-Consumer-Modus.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.batch.max-wait-time Duration Die maximale Zeitdauer für die Batchaufwärmung. Wird nur wirksam, wenn der Batch-Consumer-Modus aktiviert ist und optional ist.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.load-balancing.update-interval Duration Die Zeitdauer des Intervalls für die Aktualisierung.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.load-balancing.strategy LoadBalancingStrategy Die Lastenausgleichsstrategie.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.load-balancing.partition-ownership-expiration-interval Duration Die Zeitdauer, nach der der Besitz der Partition abläuft.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.track-last-enqueued-event-properties Boolean Gibt an, ob der Ereignisprozessor Informationen zum letzten enqueued-Ereignis auf seiner zugeordneten Partition anfordern und diese Informationen nachverfolgen soll, wenn Ereignisse empfangen werden.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.prefetch-count Integer Die Anzahl, die vom Verbraucher verwendet wird, um die Anzahl der Ereignisse zu steuern, die der Event Hub-Verbraucher aktiv empfängt und lokal in die Warteschlange stellt.
spring.cloud.stream.eventhubs.bindings.binding-name.consumer.initial-partition-event-position Zuordnen des Schlüssels als Partitions-ID und Werte von StartPositionProperties Die Zuordnung, die die Ereignisposition enthält, die für jede Partition verwendet werden soll, wenn ein Prüfpunkt für die Partition nicht im Prüfpunktspeicher vorhanden ist. Diese Zuordnung wird von der Partitions-ID abgeschlüsselt.

Hinweis

Die initial-partition-event-position Konfiguration akzeptiert eine map , um die Anfangsposition für jeden Ereignishub anzugeben. Der Schlüssel ist daher die Partitions-ID, und der Wert enthält StartPositionProperties Eigenschaften von Offset, Sequenznummer, enqueuierte Datumszeit und ob inklusive. Sie können sie z. B. als

spring:
  cloud:
    stream:
      eventhubs:
        bindings:
          <binding-name>:
            consumer:
              initial-partition-event-position:
                0:
                  offset: earliest
                1:
                  sequence-number: 100
                2:
                  enqueued-date-time: 2022-01-12T13:32:47.650005Z
                4:
                  inclusive: false
Erweiterte Consumerkonfiguration

Die obige Verbindung, Prüfpunkt - und allgemeine Azure SDK-Clientkonfiguration werden unterstützt, um für jeden Ordneranwender angepasst zu werden, der mit dem Präfix spring.cloud.stream.eventhubs.bindings.<binding-name>.consumer.konfiguriert werden kann.

Produzenteneigenschaften

Diese Eigenschaften werden über EventHubsProducerProperties.

Hersteller konfigurierbare Eigenschaften von spring-cloud-azure-stream-binder-eventhubs:

Eigenschaft type BESCHREIBUNG
spring.cloud.stream.eventhubs.bindings.binding-name.producer.sync boolean Die Switch-Kennzeichnung für die Synchronisierung des Produzenten. Wenn true, wartet der Produzent nach einem Sendevorgang auf eine Antwort.
spring.cloud.stream.eventhubs.bindings.binding-name.producer.send-timeout long Die Zeit, die nach einem Sendevorgang auf eine Antwort wartet. Wird nur wirksam, wenn ein Synchronisierungshersteller aktiviert ist.
Erweiterte Herstellerkonfiguration

Die obige Verbindung und die allgemeine Azure SDK-Clientkonfiguration werden unterstützt, um für jeden Ordnerhersteller angepasst zu werden, der mit dem Präfix spring.cloud.stream.eventhubs.bindings.<binding-name>.producer.konfiguriert werden kann.

Grundlegende Verwendung

Senden und Empfangen von Nachrichten von/an Event Hubs
  1. Füllen Sie die Konfigurationsoptionen mit Anmeldeinformationen aus.

    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in application.yml:
    spring:
      cloud:
        azure:
          eventhubs:
            connection-string: ${EVENTHUB_NAMESPACE_CONNECTION_STRING}
            processor:
              checkpoint-store:
                container-name: ${CHECKPOINT_CONTAINER}
                account-name: ${CHECKPOINT_STORAGE_ACCOUNT}
                account-key: ${CHECKPOINT_ACCESS_KEY}
        stream:
          function:
            definition: consume;supply
          bindings:
            consume-in-0:
              destination: ${EVENTHUB_NAME}
              group: ${CONSUMER_GROUP}
            supply-out-0:
              destination: ${THE_SAME_EVENTHUB_NAME_AS_ABOVE}
          eventhubs:
            bindings:
              consume-in-0:
                consumer:
                  checkpoint:
                    mode: MANUAL
    
    • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in application.yml:
    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: ${AZURE_TENANT_ID}
          eventhubs:
            namespace: ${EVENTHUB_NAMESPACE}
            processor:
              checkpoint-store:
                container-name: ${CONTAINER_NAME}
                account-name: ${ACCOUNT_NAME}
        stream:
          function:
            definition: consume;supply
          bindings:
            consume-in-0:
              destination: ${EVENTHUB_NAME}
              group: ${CONSUMER_GROUP}
            supply-out-0:
              destination: ${THE_SAME_EVENTHUB_NAME_AS_ABOVE}
          eventhubs:
            bindings:
              consume-in-0:
                consumer:
                  checkpoint:
                    mode: MANUAL
    
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identites die folgenden Eigenschaften in application.yml:
    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
            client-id: ${AZURE_MANAGED_IDENTITY_CLIENT_ID} # Only needed when using a user-assigned managed identity
          eventhubs:
            namespace: ${EVENTHUB_NAMESPACE}
            processor:
              checkpoint-store:
                container-name: ${CONTAINER_NAME}
                account-name: ${ACCOUNT_NAME}
        stream:
          function:
            definition: consume;supply
          bindings:
            consume-in-0:
              destination: ${EVENTHUB_NAME}
              group: ${CONSUMER_GROUP}
            supply-out-0:
              destination: ${THE_SAME_EVENTHUB_NAME_AS_ABOVE}
    
          eventhubs:
            bindings:
              consume-in-0:
                consumer:
                  checkpoint:
                    mode: MANUAL
    
  2. Definieren Sie Lieferanten und Verbraucher.

    @Bean
    public Consumer<Message<String>> consume() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message received: '{}', partition key: {}, sequence number: {}, offset: {}, enqueued time: {}",
                    message.getPayload(),
                    message.getHeaders().get(EventHubsHeaders.PARTITION_KEY),
                    message.getHeaders().get(EventHubsHeaders.SEQUENCE_NUMBER),
                    message.getHeaders().get(EventHubsHeaders.OFFSET),
                    message.getHeaders().get(EventHubsHeaders.ENQUEUED_TIME)
            );
    
            checkpointer.success()
                    .doOnSuccess(success -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                    .doOnError(error -> LOGGER.error("Exception found", error))
                    .block();
        };
    }
    
    @Bean
    public Supplier<Message<String>> supply() {
        return () -> {
            LOGGER.info("Sending message, sequence " + i);
            return MessageBuilder.withPayload("Hello world, " + i++).build();
        };
    }
    
Unterstützung der Partitionierung

Eine PartitionSupplier von Benutzern bereitgestellte Partitionsinformationen werden erstellt, um die Partitionsinformationen über die zu sendende Nachricht zu konfigurieren, im Folgenden wird der Prozess zum Abrufen verschiedener Prioritäten der Partitions-ID und des Schlüssels verwendet:

Flussdiagramm mit dem Partitionierungsunterstützungsprozess. )

Batch-Consumerunterstützung
  1. Ausfüllen der Batchkonfigurationsoptionen

    spring:
      cloud:
        stream:
          function:
            definition: consume
          bindings:
            consume-in-0:
              destination: ${AZURE_EVENTHUB_NAME}
              group: ${AZURE_EVENTHUB_CONSUMER_GROUP}
              consumer:
                batch-mode: true
          eventhubs:
            bindings:
              consume-in-0:
                consumer:
                  batch:
                    max-batch-size: 10 # Required for batch-consumer mode
                    max-wait-time: 1m # Optional, the default value is null
                  checkpoint:
                    mode: BATCH # or MANUAL as needed
    
  2. Definieren Sie Lieferanten und Verbraucher.

    Für den Prüfpunktmodus als BATCH, können Sie den folgenden Code verwenden, um Nachrichten zu senden und in Batches zu nutzen.

    @Bean
    public Consumer<Message<List<String>>> consume() {
        return message -> {
                for (int i = 0; i < message.getPayload().size(); i++) {
                    LOGGER.info("New message received: '{}', partition key: {}, sequence number: {}, offset: {}, enqueued time: {}",
                            message.getPayload().get(i),
                            ((List<Object>) message.getHeaders().get(EventHubsHeaders.BATCH_CONVERTED_PARTITION_KEY)).get(i),
                            ((List<Object>) message.getHeaders().get(EventHubsHeaders.BATCH_CONVERTED_SEQUENCE_NUMBER)).get(i),
                            ((List<Object>) message.getHeaders().get(EventHubsHeaders.BATCH_CONVERTED_OFFSET)).get(i),
                            ((List<Object>) message.getHeaders().get(EventHubsHeaders.BATCH_CONVERTED_ENQUEUED_TIME)).get(i));
                }
    
            };
    }
    
    @Bean
    public Supplier<Message<String>> supply() {
        return () -> {
            LOGGER.info("Sending message, sequence " + i);
            return MessageBuilder.withPayload("\"test"+ i++ +"\"").build();
        };
    }
    

    Für den Prüfpunktmodus als MANUAL, können Sie den folgenden Code verwenden, um Nachrichten zu senden und den Prüfpunkt in Batches zu nutzen/zu verwenden.

    @Bean
    public Consumer<Message<List<String>>> consume() {
        return message -> {
            for (int i = 0; i < message.getPayload().size(); i++) {
                LOGGER.info("New message received: '{}', partition key: {}, sequence number: {}, offset: {}, enqueued time: {}",
                    message.getPayload().get(i),
                    ((List<Object>) message.getHeaders().get(EventHubHeaders.BATCH_CONVERTED_PARTITION_KEY)).get(i),
                    ((List<Object>) message.getHeaders().get(EventHubHeaders.BATCH_CONVERTED_SEQUENCE_NUMBER)).get(i),
                    ((List<Object>) message.getHeaders().get(EventHubHeaders.BATCH_CONVERTED_OFFSET)).get(i),
                    ((List<Object>) message.getHeaders().get(EventHubHeaders.BATCH_CONVERTED_ENQUEUED_TIME)).get(i));
            }
    
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            checkpointer.success()
                        .doOnSuccess(success -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                        .doOnError(error -> LOGGER.error("Exception found", error))
                        .block();
        };
    }
    
    @Bean
    public Supplier<Message<String>> supply() {
        return () -> {
            LOGGER.info("Sending message, sequence " + i);
            return MessageBuilder.withPayload("\"test"+ i++ +"\"").build();
        };
    }
    

Hinweis

Im Batchaufwärmungsmodus ist application/jsonder Standardinhaltstyp des Spring Cloud Stream-Binders festgelegt. Stellen Sie daher sicher, dass die Nachrichtennutzlast mit dem Inhaltstyp ausgerichtet ist. Wenn Sie beispielsweise den Standardinhaltstyp zum Empfangen von application/json Nachrichten mit String Nutzlast verwenden, sollte die Nutzlast JSON-Zeichenfolge sein, umgeben von doppelten Anführungszeichen für den ursprünglichen Zeichenfolgentext. Während des text/plain Inhaltstyps kann es sich um ein String Objekt direkt handeln. Weitere Details finden Sie im offiziellen Dokument der Spring Cloud Stream Content Type Negotiation.

Fehlerkanäle
  • Kanal für Verbraucherfehler

Dieser Kanal ist standardmäßig geöffnet, Sie können die Fehlermeldung auf diese Weise behandeln:

// Replace destination with spring.cloud.stream.bindings.input.destination
// Replace group with spring.cloud.stream.bindings.input.group
@ServiceActivator(inputChannel = "{destination}.{group}.errors")
public void consumerError(Message<?> message) {
    LOGGER.error("Handling customer ERROR: " + message);
}
  • Fehlerkanal des Produzenten

Dieser Kanal ist standardmäßig nicht geöffnet. Sie müssen eine Konfiguration in Ihrer Application.properties hinzufügen, um sie wie folgt zu aktivieren:

spring.cloud.stream.default.producer.errorChannelEnabled=true

Sie können die Fehlermeldung auf diese Weise behandeln:

// Replace destination with spring.cloud.stream.bindings.output.destination
@ServiceActivator(inputChannel = "{destination}.errors")
public void producerError(Message<?> message) {
    LOGGER.error("Handling Producer ERROR: " + message);
}
  • Globaler Standardfehlerkanal

Ein globaler Fehlerkanal namens "errorChannel" wird standardmäßig von Spring Integration erstellt, wodurch Benutzer viele Endpunkte abonnieren können.

@ServiceActivator(inputChannel = "errorChannel")
public void producerError(Message<?> message) {
    LOGGER.error("Handling ERROR: " + message);
}
Ereignishubs-Nachrichtenkopfzeilen

Weitere Informationen finden Sie in den Nachrichtenkopfzeilen des Ereignishubs für die unterstützten Grundlegenden Nachrichtenheader.

Mehrere Ordnerunterstützung

Die Verbindung mit mehreren Event Hubs-Namespaces wird auch mithilfe mehrerer Ordner unterstützt. In diesem Beispiel wird Verbindungszeichenfolge als Beispiel verwendet. Anmeldeinformationen von Dienstprinzipalen und verwalteten Identitäten werden ebenfalls unterstützt, Benutzer können verwandte Eigenschaften in den Umgebungseinstellungen jedes Ordners festlegen.

  1. Um mehrere Ordner von EventHubs zu verwenden, müssen wir die folgenden Eigenschaften in application.yml konfigurieren.

    spring:
      cloud:
        stream:
          function:
            definition: consume1;supply1;consume2;supply2
          bindings:
            consume1-in-0:
              destination: ${EVENTHUB_NAME_01}
              group: ${CONSUMER_GROUP_01}
            supply1-out-0:
              destination: ${THE_SAME_EVENTHUB_NAME_01_AS_ABOVE}
            consume2-in-0:
              binder: eventhub-2
              destination: ${EVENTHUB_NAME_02}
              group: ${CONSUMER_GROUP_02}
            supply2-out-0:
              binder: eventhub-2
              destination: ${THE_SAME_EVENTHUB_NAME_02_AS_ABOVE}
          binders:
            eventhub-1:
              type: eventhubs
              default-candidate: true
              environment:
                spring:
                  cloud:
                    azure:
                      eventhubs:
                        connection-string: ${EVENTHUB_NAMESPACE_01_CONNECTION_STRING}
                        processor:
                          checkpoint-store:
                            container-name: ${CHECKPOINT_CONTAINER_01}
                            account-name: ${CHECKPOINT_STORAGE_ACCOUNT}
                            account-key: ${CHECKPOINT_ACCESS_KEY}
            eventhub-2:
              type: eventhubs
              default-candidate: false
              environment:
                spring:
                  cloud:
                    azure:
                      eventhubs:
                        connection-string: ${EVENTHUB_NAMESPACE_02_CONNECTION_STRING}
                        processor:
                          checkpoint-store:
                            container-name: ${CHECKPOINT_CONTAINER_02}
                            account-name: ${CHECKPOINT_STORAGE_ACCOUNT}
                            account-key: ${CHECKPOINT_ACCESS_KEY}
          eventhubs:
            bindings:
              consume1-in-0:
                consumer:
                  checkpoint:
                    mode: MANUAL
              consume2-in-0:
                consumer:
                  checkpoint:
                    mode: MANUAL
          poller:
            initial-delay: 0
            fixed-delay: 1000
    
  2. wir müssen zwei Lieferanten und zwei Verbraucher definieren

    @Bean
    public Supplier<Message<String>> supply1() {
        return () -> {
            LOGGER.info("Sending message1, sequence1 " + i);
            return MessageBuilder.withPayload("Hello world1, " + i++).build();
        };
    }
    
    @Bean
    public Supplier<Message<String>> supply2() {
        return () -> {
            LOGGER.info("Sending message2, sequence2 " + j);
            return MessageBuilder.withPayload("Hello world2, " + j++).build();
        };
    }
    
    @Bean
    public Consumer<Message<String>> consume1() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message1 received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(success -> LOGGER.info("Message1 '{}' successfully checkpointed", message))
                    .doOnError(error -> LOGGER.error("Exception found", error))
                    .block();
        };
    }
    
    @Bean
    public Consumer<Message<String>> consume2() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message2 received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(success -> LOGGER.info("Message2 '{}' successfully checkpointed", message))
                    .doOnError(error -> LOGGER.error("Exception found", error))
                    .block();
        };
    }
    
Ressourcenbereitstellung

Ereignishubs-Ordner unterstützt die Bereitstellung von Ereignishub- und Verbrauchergruppen, Die Benutzer können die folgenden Eigenschaften verwenden, um die Bereitstellung zu ermöglichen.

spring:
  cloud:
    azure:
      credential:
        tenant-id: ${AZURE_TENANT_ID}
      profile:
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      eventhubs:
        resource:
          resource-group: ${AZURE_EVENTHUBS_RESOURECE_GROUP}

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Azure Spring Cloud Stream Binder für Azure Service Bus

Wichtige Begriffe

Der Spring Cloud Stream Binder für Azure Service Bus stellt die Bindungsimplementierung für das Spring Cloud Stream Framework bereit. Diese Implementierung verwendet Spring Integration Service Bus Channel Adapter in seiner Gründung.

Geplante Nachricht

Dieser Ordner unterstützt das Übermitteln von Nachrichten an ein Thema für die verzögerte Verarbeitung. Benutzer können geplante Nachrichten mit Header-Express x-delay in Millisekunden senden, um eine Verzögerungszeit für die Nachricht zu erhalten. Die Nachricht wird nach Millisekunden an die jeweiligen Themen x-delay übermittelt.

Consumergruppe

Service Bus Topic bietet ähnliche Unterstützung der Verbrauchergruppe wie Apache Kafka, aber mit einer leichten unterschiedlichen Logik. Dieser Bindemittel basiert auf Subscription einem Thema, das als Verbrauchergruppe fungiert.

Setup für Abhängigkeiten

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
</dependency>

Alternativ können Sie auch den Spring Cloud Azure Stream Service Bus Starter verwenden, wie im folgenden Beispiel für Maven gezeigt:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-stream-servicebus</artifactId>
</dependency>

Konfiguration

Der Ordner stellt die folgenden 2 Teile der Konfigurationsoptionen bereit:

Verbindungskonfigurationseigenschaften

Dieser Abschnitt enthält die Konfigurationsoptionen, die zum Herstellen einer Verbindung mit Azure Service Bus verwendet werden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um Azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie "Autorisieren" mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Konfigurierbare Verbindungseigenschaften von spring-cloud-azure-stream-binder-servicebus:

Eigenschaft type BESCHREIBUNG
spring.cloud.azure.servicebus.enabled boolean Ob ein Azure Service Bus aktiviert ist.
spring.cloud.azure.servicebus.connection-string String Dienstbus-Namespace-Verbindungszeichenfolgenwert.
spring.cloud.azure.servicebus.namespace String Dienstbus-Namespacewert, der das Präfix des FQDN ist. Ein FQDN sollte aus NamespaceName.DomainName bestehen.
spring.cloud.azure.servicebus.domain-name String Domänenname eines Azure Service Bus Namespacewerts.

Hinweis

Allgemeine Azure Service SDK-Konfigurationsoptionen können auch für den Spring Cloud Azure Stream Service Bus-Ordner konfiguriert werden. Die unterstützten Konfigurationsoptionen werden auf der Konfigurationsseite eingeführt und können entweder mit dem einheitlichen Präfix spring.cloud.azure. oder dem Präfix spring.cloud.azure.servicebus.konfiguriert werden.

Der Ordner unterstützt auch Spring Could Azure Resource Manager standardmäßig. Weitere Informationen zum Abrufen der Verbindungszeichenfolge mit Sicherheitsprinzipalen, die nicht mit Data verwandten Rollen gewährt werden, finden Sie im Ressourcen-Manager-Beispiel für Details.

Azure Service Bus Bindungskonfigurationseigenschaften

Die folgenden Optionen sind in vier Abschnitte unterteilt: Verbrauchereigenschaften, erweiterte Consumerkonfigurationen, Produzenteneigenschaften und Erweiterte Produzentenkonfigurationen.

Verbrauchereigenschaften

Diese Eigenschaften werden über ServiceBusConsumerProperties.

Konfigurierbare Eigenschaften von spring-cloud-azure-stream-binder-servicebus:

Eigenschaft type Standard BESCHREIBUNG
spring.cloud.stream.servicebus.bindings.binding-name.consumer.requeue-abgelehnt boolean false Wenn die fehlgeschlagenen Nachrichten an die DLQ weitergeleitet werden.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.max-gleichzeitige Aufrufe Integer 1 Max. gleichzeitige Nachrichten, die der Service Bus-Prozessorclient verarbeiten sollte.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.max-gleichzeitige Sitzungen Integer NULL Maximale Anzahl gleichzeitiger Sitzungen, die jederzeit verarbeitet werden sollen.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.session-enabled Boolean NULL Ob die Sitzung aktiviert ist.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.prefetch-count Integer 0 Die Prefetch-Anzahl des Service Bus-Prozessorclients.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.sub-queue UnterQueue none Der Typ der Unterwarteschlange, mit der eine Verbindung hergestellt werden soll.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.max-auto-lock-renew-duration Duration 5m Die Zeit, um die automatische Verlängerung der Sperre fortzusetzen.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.receive-mode ServiceBusReceiveMode peek_lock Der Empfangsmodus des Service Bus-Prozessorclients.
spring.cloud.stream.servicebus.bindings.binding-name.consumer.auto-complete Boolean true Ob Nachrichten automatisch festgelegt werden sollen. Wenn sie als "false" festgelegt ist, wird eine Nachrichtenüberschrift hinzugefügt, um Entwicklern die manuelle Abrechnung von Checkpointer Nachrichten zu ermöglichen.
Erweiterte Consumerkonfiguration

Die obige Verbindung und die allgemeine Azure SDK-Clientkonfiguration werden unterstützt, um für jeden Ordnerverbraucher angepasst zu werden, der mit dem Präfix spring.cloud.stream.servicebus.bindings.<binding-name>.consumer.konfiguriert werden kann.

Produzenteneigenschaften

Diese Eigenschaften werden über ServiceBusProducerProperties.

Hersteller konfigurierbare Eigenschaften von spring-cloud-azure-stream-binder-servicebus:

Eigenschaft type Standard BESCHREIBUNG
spring.cloud.stream.servicebus.bindings.binding-name.producer.sync boolean false Wechseln sie zur Synchronisierung des Herstellers.
spring.cloud.stream.servicebus.bindings.binding-name.producer.send-timeout long 10000 Timeout-Wert für das Senden des Herstellers.
spring.cloud.stream.servicebus.bindings.binding-name.producer.entity-type ServiceBusEntityType NULL Service Bus-Entitätstyp des Herstellers, der für den Bindungshersteller erforderlich ist.

Wichtig

Bei Verwendung des Bindungsherstellers muss die Eigenschaft spring.cloud.stream.servicebus.bindings.<binding-name>.producer.entity-type konfiguriert werden.

Erweiterte Herstellerkonfiguration

Die oben genannte Verbindung und die allgemeine Azure SDK-Clientkonfiguration werden unterstützt, um für jeden Ordnerhersteller angepasst zu werden, der mit dem Präfix spring.cloud.stream.servicebus.bindings.<binding-name>.producer.konfiguriert werden kann.

Grundlegende Verwendung

Senden und Empfangen von Nachrichten von/an Service Bus
  1. Füllen Sie die Konfigurationsoptionen mit Anmeldeinformationen aus.

    • Konfigurieren Sie für Anmeldeinformationen als Verbindungszeichenfolge die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              servicebus:
                connection-string: ${SERVICEBUS_NAMESPACE_CONNECTION_STRING}
            stream:
              function:
                definition: consume;supply
              bindings:
                consume-in-0:
                  destination: ${SERVICEBUS_ENTITY_NAME}
                  # If you use Service Bus Topic, add the following configuration
                  # group: ${SUBSCRIPTION_NAME}
                supply-out-0:
                  destination: ${SERVICEBUS_ENTITY_NAME_SAME_AS_ABOVE}
              servicebus:
                bindings:
                  consume-in-0:
                    consumer:
                      auto-complete: false
                  supply-out-0:
                    producer:
                      entity-type: queue # set as "topic" if you use Service Bus Topic
    
    • Konfigurieren Sie für Anmeldeinformationen als Dienstprinzipal die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                client-id: ${AZURE_CLIENT_ID}
                client-secret: ${AZURE_CLIENT_SECRET}
              profile:
                tenant-id: ${AZURE_TENANT_ID}
              servicebus:
                namespace: ${SERVICEBUS_NAMESPACE}
            stream:
              function:
                definition: consume;supply
              bindings:
                consume-in-0:
                  destination: ${SERVICEBUS_ENTITY_NAME}
                  # If you use Service Bus Topic, add the following configuration
                  # group: ${SUBSCRIPTION_NAME}
                supply-out-0:
                  destination: ${SERVICEBUS_ENTITY_NAME_SAME_AS_ABOVE}
              servicebus:
                bindings:
                  consume-in-0:
                    consumer:
                      auto-complete: false
                  supply-out-0:
                    producer:
                      entity-type: queue # set as "topic" if you use Service Bus Topic
    
    • Konfigurieren Sie für Anmeldeinformationen als verwaltete Identitäten die folgenden Eigenschaften in application.yml:
        spring:
          cloud:
            azure:
              credential:
                managed-identity-enabled: true
                client-id: ${MANAGED_IDENTITY_CLIENT_ID} # Only needed when using a user-assigned managed identity
              servicebus:
                namespace: ${SERVICEBUS_NAMESPACE}
            stream:
              function:
                definition: consume;supply
              bindings:
                consume-in-0:
                  destination: ${SERVICEBUS_ENTITY_NAME}
                  # If you use Service Bus Topic, add the following configuration
                  # group: ${SUBSCRIPTION_NAME}
                supply-out-0:
                  destination: ${SERVICEBUS_ENTITY_NAME_SAME_AS_ABOVE}
              servicebus:
                bindings:
                  consume-in-0:
                    consumer:
                      auto-complete: false
                  supply-out-0:
                    producer:
                      entity-type: queue # set as "topic" if you use Service Bus Topic
    
  2. Definieren Sie Lieferanten und Verbraucher.

    @Bean
    public Consumer<Message<String>> consume() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message received: '{}'", message.getPayload());
    
            checkpointer.success()
                    .doOnSuccess(success -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                    .doOnError(error -> LOGGER.error("Exception found", error))
                    .block();
        };
    }
    
    @Bean
    public Supplier<Message<String>> supply() {
        return () -> {
            LOGGER.info("Sending message, sequence " + i);
            return MessageBuilder.withPayload("Hello world, " + i++).build();
        };
    }
    
Partitionsschlüsselunterstützung

Der Ordner unterstützt die Service Bus-Partitionierung , indem die Einstellung von Partitionsschlüssel und Sitzungs-ID im Nachrichtenheader ermöglicht wird. In diesem Abschnitt wird erläutert, wie Sie den Partitionsschlüssel für Nachrichten festlegen.

Spring Cloud Stream stellt eine Partitionsschlüssel-SpEL-Ausdruckseigenschaft spring.cloud.stream.bindings.<binding-name>.producer.partition-key-expressionbereit. Wenn Sie diese Eigenschaft z. B. als "'partitionKey-' + headers[<message-header-key>]" Kopfzeile festlegen und eine Kopfzeile namens "Message-header-key" hinzufügen. Spring Cloud Stream verwendet den Wert für diesen Header beim Bewerten des obigen Ausdrucks, um einen Partitionsschlüssel zuzuweisen. Hier ist ein Beispiel-Herstellercode:

@Bean
public Supplier<Message<String>> generate() {
    return () -> {
        String value = "random payload";
        return MessageBuilder.withPayload(value)
            .setHeader("<message-header-key>", value.length() % 4)
            .build();
    };
}
Session Support

Der Ordner unterstützt Nachrichtensitzungen von Service Bus. Die Sitzungs-ID einer Nachricht könnte über den Nachrichtenheader festgelegt werden.

@Bean
public Supplier<Message<String>> generate() {
    return () -> {
        String value = "random payload";
        return MessageBuilder.withPayload(value)
            .setHeader(ServiceBusMessageHeaders.SESSION_ID, "Customize session ID")
            .build();
    };
}

Hinweis

Laut Service Bus-Partitionierung hat die Sitzungs-ID höhere Priorität als Partitionsschlüssel. Wenn also sowohl Kopfzeilen als ServiceBusMessageHeaders#SESSION_ID auch (oder ServiceBusMessageHeaders#PARTITION_KEYAzureHeaders#PARTITION_KEY) festgelegt werden, wird der Wert der Sitzungs-ID schließlich verwendet, um den Wert des Partitionsschlüssels zu überschreiben.

Fehlerkanäle
  • Fehlerkanal für Verbraucher

Dieser Kanal ist standardmäßig geöffnet, und ein Standard-Fehlerkanalhandler wird verwendet, um fehlgeschlagene Nachrichten an die Totbuchstabenwarteschlange zu senden, wenn spring.cloud.stream.servicebus.bindings.<binding-name>.consumer.requeue-rejected dies aktiviert ist, andernfalls werden die fehlgeschlagenen Nachrichten abgebrochen.

Um den Verbraucherfehlerkanalhandler anzupassen, können Sie den entsprechenden Fehlerhandler auf diese Weise registrieren:

// Replace destination with spring.cloud.stream.bindings.input.destination
// Replace group with spring.cloud.stream.bindings.input.group
@ServiceActivator(inputChannel = "{destination}.{group}.errors")
public void consumerError(Message<?> message) {
    LOGGER.error("Handling customer ERROR: " + message);
}
  • Fehlerkanal des Herstellers

Dieser Kanal ist standardmäßig nicht geöffnet. Sie müssen eine Konfiguration in Ihrer Application.properties hinzufügen, um sie wie folgt zu aktivieren:

spring.cloud.stream.default.producer.errorChannelEnabled=true

Sie können die Fehlermeldung auf diese Weise behandeln:

// Replace destination with spring.cloud.stream.bindings.output.destination
@ServiceActivator(inputChannel = "{destination}.errors")
public void producerError(Message<?> message) {
    LOGGER.error("Handling Producer ERROR: " + message);
}
  • Globaler Standardfehlerkanal

Ein globaler Fehlerkanal namens "errorChannel" wird standardmäßig von Spring Integration erstellt, wodurch Benutzer viele Endpunkte abonnieren können.

@ServiceActivator(inputChannel = "errorChannel")
public void producerError(Message<?> message) {
    LOGGER.error("Handling ERROR: " + message);
}
Dienstbusnachrichtenheader

Weitere Informationen finden Sie in den Dienstbus-Nachrichtenkopfzeilen für die unterstützten Grundlegenden Nachrichtenheader.

Hinweis

Beim Festlegen des Partitonschlüssels ist die Priorität der Nachrichtenheader höher als die Spring Cloud Stream-Eigenschaft. Wird also spring.cloud.stream.bindings.<binding-name>.producer.partition-key-expression nur wirksam, wenn keine der Kopfzeilen von ServiceBusMessageHeaders#SESSION_ID, ServiceBusMessageHeaders#PARTITION_KEYAzureHeaders#PARTITION_KEY ist konfiguriert.

Unterstützung für mehrere Ordner

Die Verbindung mit mehreren Service Bus-Namespaces wird auch mithilfe mehrerer Ordner unterstützt. In diesem Beispiel wird Verbindungszeichenfolge als Beispiel verwendet. Anmeldeinformationen von Dienstprinzipalen und verwalteten Identitäten werden ebenfalls unterstützt, Benutzer können verwandte Eigenschaften in den Umgebungseinstellungen jedes Ordners festlegen.

  1. Um mehrere Ordner von ServiceBus zu verwenden, müssen wir die folgenden Eigenschaften in application.yml konfigurieren.

    spring:
      cloud:
        stream:
          function:
            definition: consume1;supply1;consume2;supply2
          bindings:
            consume1-in-0:
              destination: ${SERVICEBUS_TOPIC_NAME}
              group: ${SUBSCRIPTION_NAME}
            supply1-out-0:
              destination: ${SERVICEBUS_TOPIC_NAME_SAME_AS_ABOVE}
            consume2-in-0:
              binder: servicebus-2
              destination: ${SERVICEBUS_QUEUE_NAME}
            supply2-out-0:
              binder: servicebus-2
              destination: ${SERVICEBUS_QUEUE_NAME_SAME_AS_ABOVE}
          binders:
            servicebus-1:
              type: servicebus
              default-candidate: true
              environment:
                spring:
                  cloud:
                    azure:
                      servicebus:
                        connection-string: ${SERVICEBUS_NAMESPACE_01_CONNECTION_STRING}
            servicebus-2:
              type: servicebus
              default-candidate: false
              environment:
                spring:
                  cloud:
                    azure:
                      servicebus:
                        connection-string: ${SERVICEBUS_NAMESPACE_02_CONNECTION_STRING}
          servicebus:
            bindings:
              consume1-in-0:
                consumer:
                  auto-complete: false
              supply1-out-0:
                producer:
                  entity-type: topic
              consume2-in-0:
                consumer:
                  auto-complete: false
              supply2-out-0:
                producer:
                  entity-type: queue
          poller:
            initial-delay: 0
            fixed-delay: 1000
    
  2. wir müssen zwei Lieferanten und zwei Verbraucher definieren

    @Bean
    public Supplier<Message<String>> supply1() {
        return () -> {
            LOGGER.info("Sending message1, sequence1 " + i);
            return MessageBuilder.withPayload("Hello world1, " + i++).build();
        };
    }
    
    @Bean
    public Supplier<Message<String>> supply2() {
        return () -> {
            LOGGER.info("Sending message2, sequence2 " + j);
            return MessageBuilder.withPayload("Hello world2, " + j++).build();
        };
    }
    
    @Bean
    public Consumer<Message<String>> consume1() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message1 received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(s -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                    .doOnError(e -> LOGGER.error("Error found", e))
                    .block();
        };
    }
    
    @Bean
    public Consumer<Message<String>> consume2() {
        return message -> {
            Checkpointer checkpointer = (Checkpointer) message.getHeaders().get(CHECKPOINTER);
            LOGGER.info("New message2 received: '{}'", message);
            checkpointer.success()
                    .doOnSuccess(s -> LOGGER.info("Message '{}' successfully checkpointed", message.getPayload()))
                    .doOnError(e -> LOGGER.error("Error found", e))
                    .block();
        };
    
    }
    
Ressourcenbereitstellung

Dienstbusbinder unterstützt die Bereitstellung von Warteschlangen, Thema und Abonnement, Die Benutzer können die folgenden Eigenschaften verwenden, um die Bereitstellung zu ermöglichen.

spring:
  cloud:
    azure:
      credential:
        tenant-id: ${AZURE_TENANT_ID}
      profile:
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      servicebus:
        resource:
          resource-group: ${AZURE_SERVICEBUS_RESOURECE_GROUP}
    stream:
      servicebus:
        bindings:
          <binding-name>:
            consumer:
              entity-type: ${SERVICEBUS_CONSUMER_ENTITY_TYPE}

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Spring JMS-Unterstützung

Um Azure Service Bus von der JMS-API zu verwenden, die in das Spring JMS-Framework integriert ist. Azure Service Bus Verbindungszeichenfolge muss bereitgestellt werden, die in den Anmeldenamen, das Kennwort und den Remote-URI für den AMQP-Broker analysiert werden soll.

Setup für Abhängigkeiten

Fügen Sie die folgenden Abhängigkeiten hinzu, wenn Sie Ihre Spring JMS-Anwendung migrieren möchten, um Azure Service Bus zu verwenden.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>

Konfiguration

Konfigurierbare Eigenschaften bei Verwendung von Spring JMS-Unterstützung:

Eigenschaft BESCHREIBUNG
spring.jms.servicebus.connection-string Azure Service Bus Verbindungszeichenfolge. Sollte bereitgestellt werden, wenn sie die Verbindungszeichenfolge direkt bereitstellen möchten.
spring.jms.servicebus.topic-client-id JMS-Client-ID. Funktioniert nur für die Beannung von ThemaJmsListenerContainerFactory.
spring.jms.servicebus.idle-timeout Die Dauer für den Leerlauf.
spring.jms.servicebus.pricing-tier Die Azure Service Bus Preisstufe.
spring.jms.servicebus.listener.reply-pub-sub-domain Ob der Antwortzieltyp Thema ist.
spring.jms.servicebus.listener.phase Geben Sie die Phase an, in der dieser Container gestartet und beendet werden soll.
spring.jms.servicebus.listener.reply-qos-settings Konfigurieren Sie die QosSettings, die beim Senden einer Antwort verwendet werden sollen.
spring.jms.servicebus.listener.subscription-durable Ob das Abonnement dauerhaft ist. Funktioniert nur für die Beannung von ThemaJmsListenerContainerFactory.
spring.jms.servicebus.listener.subscription-shared Ob das Abonnement freigegeben wird. Funktioniert nur für die Beannung von ThemaJmsListenerContainerFactory.
spring.jms.servicebus.password Anmeldekennwort des AMQP-Brokers
spring.jms.servicebus.pool.block-if-full Ob blockiert werden soll, wenn eine Verbindung angefordert wird und der Pool voll ist.
spring.jms.servicebus.pool.block-if-full-timeout Blockierungszeitraum vor dem Auslösen einer Ausnahme, wenn der Pool noch voll ist.
spring.jms.servicebus.pool.enabled Ob eine JmsPoolConnectionFactory erstellt werden soll, anstatt einer regulärenConnectionFactory.
spring.jms.servicebus.pool.idle-timeout Timeout für Verbindungs-Leerlauf.
spring.jms.servicebus.pool.max-connections Maximale Anzahl von poolierten Verbindungen.
spring.jms.servicebus.pool.max-sessions-per-connection Maximale Anzahl von poolierten Sitzungen pro Verbindung im Pool.
spring.jms.servicebus.pool.time-between-ablauf-check Zeit für den Schlaf zwischen Ausführungen des Leerlaufs der Verbindungsverwendungsthread.
spring.jms.servicebus.pool.use-anonym-producer Ob nur eine anonyme "MessageProducer"-Instanz verwendet werden soll.
spring.jms.servicebus.prefetch-policy.all Fallbackwert für die Prefetch-Option in diesem Service Bus-Namespace.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Die Anzahl der Vorfetch für ein dauerhaftes Thema.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Die Anzahl der Prefetch für den Warteschlangenbrowser.
spring.jms.servicebus.prefetch-policy.queue-prefetch Die Anzahl der Vorfetch für die Warteschlange.
spring.jms.servicebus.prefetch-policy.topic-prefetch Die Anzahl der Vorabfetch für Thema.
spring.jms.servicebus.remote-url URL des AMQP-Brokers.
spring.jms.servicebus.username Anmeldebenutzer des AMQP-Brokers.

Hinweis

Die allgemeine Spring JMS-Konfiguration wird für kurze Zeit nicht angegeben. Weitere Details finden Sie im Spring JMS-Dokument .

Grundlegende Verwendung

Verwenden der Dienstbusverbindungszeichenfolge

Die einfachste Möglichkeit zum Herstellen einer Verbindung mit Service Bus für Spring JMS-Anwendung besteht aus der Verbindungszeichenfolge.

Fügen Sie die folgenden Eigenschaften hinzu, und Sie sind gut zu wechseln.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Hinweis

Die standardmäßig aktivierte ConnectionFactory Option ist das Hinzufügen des Sitzungscaches sowie der CachingConnectionFactory Zwischenspeicherung von Nachrichtenproducer. Wenn Sie das Verbindungspooling aktivieren möchten, das eine der JmsPoolConnectionFactory enthält, sollte die Eigenschaft spring.jms.servicebus.pool.enabled angegeben truewerden. Sie können weitere Konfigurationsoptionen für pooling (Eigenschaften mit Präfix spring.jms.servicebus.pool.) aus dem obigen Konfigurationsabschnitt finden.

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Spring Native Support

Spring Native unterstützt die Kompilierung von Spring Boot-Anwendungen mit nativen ausführbaren Dateien mithilfe des GraalVM-Native-Image-Compilers. Die nativen Bilder bringen viele Vorteile, z. B. sofortiges Starten, sofortige Spitzenleistung und reduzierten Speicherverbrauch. Einige Spring Cloud Azure-Features können auch von der Spring Native-Unterstützung profitieren. Das Ziel ist, dass Spring Cloud Azure-Anwendungen ohne Codeänderung als native Bilder erstellt werden können. Weitere Informationen finden Sie in der Spring Native-Dokumentation.

Support

Spring Cloud Azure wurde gegen GraalVM und Spring Native überprüft und stellt die Betaversionsunterstützung bereit. Sie können es in Ihren Projekten versuchen, wenn sie diese unterstützten Abhängigkeiten verwenden, und Fehler auslösen oder Pull-Anforderungen beitragen, wenn etwas in Spring Cloud Azure falsch ist. Weitere Informationen finden Sie im Abschnitt "Support " in der Spring Native-Dokumentation.

Spring Native

Spring Cloud Azure 4.1.0-beta.1 wurde auf Spring Native 0.11.4 und GraalVM 22.0.0getestet.

Spring Cloud Azure Native

Hinweis

0.11.4 Spring Native wurde mit Spring Cloud Azure Native Configuration 4.0.0-beta.1getestet.

Spring Cloud Azure bietet eine Abhängigkeit spring-cloud-azure-native-configuration , die eine Erweiterung der Spring Native-Konfiguration für Spring Cloud Azure-Bibliotheken ist. Das Spring Native AOT-Plug-In kombiniert die spring-native-configurationspring-cloud-azure-native-configuration Anwendungen in nativen ausführbaren Dateien. Sie benötigen keine zusätzlichen Änderungen an dem Code, der Spring Cloud Azure-Bibliotheken verwendet, neben dem Hinzufügen der Abhängigkeit, die nur für den Code in den Spring Cloud Azure-Bibliotheken gilt.

Die folgenden Funktionen werden unterstützt:

  • Azure App Configuration automatische Konfiguration von Clients
  • Azure Event Hubs automatische Konfiguration von Clients
  • Automatische Konfiguration von Azure Key Vault Zertifikaten
  • Automatische Konfiguration von Azure Key Vault Geheimen Clients
  • Automatische Konfiguration von Azure Storage Blob-Clients
  • Automatische Konfiguration von Azure Storage File Share-Clients
  • Automatische Konfiguration von Azure Storage-Warteschlangenclients
  • Frühjahrsintegration für Azure Event Hubs
  • Spring-Integration für Azure Storage-Warteschlange

Einschränkungen

Die Spring Cloud Azure-Support für Spring Native ist immer noch in den frühen Phasen und wird weiterhin aktualisiert. Die folgenden Features werden noch nicht unterstützt:

  • Automatische Konfiguration von Azure Cosmos-Clients
  • Azure Service Bus automatischen Konfiguration von Clients
  • Springdaten für Azure Cache for Redis
  • Frühjahrsdaten für Azure Cosmos
  • Spring Cloud Stream für Azure Event Hubs
  • Spring Cloud Stream für Azure Service Bus
  • Spring Kafka für Azure Event Hubs
  • Frühjahrsintegration für Azure Service Bus

Hinweis

Nicht alle systemeigenen Bildoptionen werden von Spring Native unterstützt. Weitere Informationen finden Sie im Abschnitt "Native Bildoptionen " der Spring Native-Dokumentation.

Warnung

Spring Cloud Azure 4.1.0-beta.1 wird nicht für das Erstellen nativer ausführbarer Dateien basierend auf Gradle Kotlin überprüft.

Projekteinrichtung

Spring Cloud Azure-Anwendungen können den Spring Native-Support aktivieren, indem Sie den Anweisungen im Abschnitt " Erste Schritte" der Spring Native-Dokumentation folgen. Die einzige zusätzliche Verarbeitung ist das Hinzufügen der folgenden Abhängigkeit zur POM-Datei.

Tipp

Die Abhängigkeit com.azure.spring:spring-cloud-azure-native-configuration wird nicht in com.azure.spring:spring-cloud-azure-dependenciesverwaltet.

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-native-configuration</artifactId>
  <version>4.0.0-beta.1</version>
</dependency>

Erstellen der nativen Anwendung

In den folgenden Abschnitten werden die beiden wichtigsten Möglichkeiten zum Erstellen einer nativen Spring Boot-Anwendung mit Spring Cloud Azure-Bibliotheken beschrieben.

Erstellen mit Buildpacks

Die systemeigene Anwendung kann wie folgt erstellt werden:

mvn spring-boot:build-image

Weitere Informationen finden Sie im Abschnitt "Erste Schritte mit Buildpacks " in der Spring Native-Dokumentation.

Erstellen mit nativen Buildtools

Sie können die systemeigene Anwendung mithilfe des folgenden Befehls erstellen:

mvn -Pnative -DskipTests package

Weitere Informationen finden Sie im Abschnitt " Erste Schritte mit nativen Buildtools " der Spring Native-Dokumentation.

Ausführen der nativen Anwendung

In den folgenden Abschnitten werden die beiden Hauptmethoden zum Ausführen einer nativen ausführbaren Datei beschrieben.

Tipp

Vorausgesetzt, die Projektartefakt-ID ist spring-cloud-azure-sample und die Projektversion lautet 0.0.1-SNAPSHOT, können Sie den benutzerdefinierten Bildnamen auf eine der folgenden Arten angeben:

  • Wenn Sie Cloud Native Buildpacks verwenden, verwenden Sie das imageKonfigurationselement ->name->custom-image-name im Spring Boot-Plug-In.
  • Wenn Sie GraalVM Native Build Tools verwenden, verwenden Sie das imageNameKonfigurationselement ->custom-image-name im Spring Boot Plug-In.

Ausführen mit Buildpacks

Um die Anwendung auszuführen, können Sie die übliche Weise verwenden docker , wie im folgenden Beispiel gezeigt:

docker run --rm -p 8080:8080 spring-cloud-azure-sample:0.0.1-SNAPSHOT

Ausführen mit nativen Buildtools

Um Ihre Anwendung auszuführen, verwenden Sie den folgenden Befehl:

target\spring-cloud-azure-sample

Beispiele

Weitere Informationen finden Sie unter Verwenden von Spring Native mit Spring Cloud Azure Storage Blob Starter auf GitHub.

Hier sind weitere überprüfte Beispiele, die Spring Native unterstützen. Weitere Informationen finden Sie unter Ausführen von Beispielen basierend auf Spring Native auf GitHub.

Bibliotheksartefakt-ID Unterstützte Beispielprojekte
spring-cloud-azure-starter-appconfiguration appconfiguration-client
spring-cloud-azure-starter-eventhubs eventhubs-client
spring-cloud-azure-starter-integration-eventhubs Speicherwarteschleifenintegration, Speicherwarteschleifenvorgang
spring-cloud-azure-starter-integration-storage-queue appconfiguration-client
spring-cloud-azure-starter-keyvault-secrets property-source, secret-client
spring-cloud-azure-starter-storage-blob Speicher-Blob-Beispiel
spring-cloud-azure-starter-storage-file-share Beispiel für Speicherdatei
spring-cloud-azure-starter-storage-queue Speicherwarteschlangenclient

Kafka-Unterstützung

Ab Version 4.3.0 unterstützt Spring Cloud Azure für Kafka verschiedene Arten von Anmeldeinformationen zum Authentifizieren und Herstellen einer Verbindung mit Azure Event Hubs.

Unterstützte Kafka-Version

Die aktuelle Version des Starters sollte mit Apache Kafka Clients 2.0.0 mit Java 8 oder höher kompatibel sein.

Unterstützte Authentifizierungstypen

Die folgenden Authentifizierungstypen werden unterstützt:

  • Authentifizierung für einfache Verbindungszeichenfolgen
    • Direkte Verbindungszeichenfolgenauthentifizierung
    • ARM-basierte Verbindungszeichenfolgenauthentifizierung
  • Authentifizierung von OAuth-Anmeldeinformationen
    • Authentifizierung der verwalteten Identität
    • Authentifizierung mit Benutzername/Kennwort
    • Dienstprinzipalauthentifizierung
    • Authentifizierung per DefautlAzureCredential

Funktionsweise

Authentifizierung von OAuth-Anmeldeinformationen

In diesem Abschnitt wird der gesamte Workflow der Spring Cloud OAuth-Authentifizierung beschrieben.

Spring Cloud Azure erstellt zunächst eine der folgenden Arten von Anmeldeinformationen abhängig von der Anwendungsauthentifizierungskonfiguration:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Wenn keine dieser Arten von Anmeldeinformationen gefunden wird, wird die Anmeldeinformationskette über DefaultAzureTokenCredential sie verwendet, um Anmeldeinformationen aus Anwendungseigenschaften, Umgebungsvariablen, verwalteten Identitäten oder IDEs abzurufen. Ausführliche Informationen finden Sie im Abschnitt zur Spring Cloud Azure-Authentifizierung .

Authentifizierung für einfache Verbindungszeichenfolgen

Für den Verbindungszeichenfolgenauthentifizierungsmodus können Sie die Verbindungszeichenfolgenauthentifizierung direkt verwenden oder die Azure-Resource Manager verwenden, um die Verbindungszeichenfolge abzurufen. Weitere Informationen zur Verwendung finden Sie im Abschnitt " Grundlegende Verwendung für verbindungszeichenfolgenauthentifizierung ".

Hinweis

Seit Version 4.3.0 ist die Verbindungszeichenfolgenauthentifizierung zugunsten von OAuth-Authentifizierungen veraltet.

Konfiguration

Konfigurierbare Eigenschaften beim Verwenden der Kafka-Unterstützung mit der OAuth-Authentifizierung

Spring Cloud Azure für Kafka unterstützt die folgenden beiden Konfigurationsoptionen:

  1. Die Konfigurationsoptionen der credential globalen Authentifizierung und profile mit Präfixen von spring.cloud.azure.
  2. Kafka-spezifische Konfigurationen auf Ebene. Die Konfigurationen auf Kafka-Ebene sind auch für Spring Boot- und Spring Cloud Stream-Ordner für common, consumer, producer, oder admin Bereiche verfügbar, die unterschiedliche Präfixe aufweisen.

Die globalen Eigenschaften werden über com.azure.spring.cloud.autoconfigure.context.AzureGlobalProperties. Die Kafka-spezifischen Eigenschaften werden über org.springframework.boot.autoconfigure.kafka.KafkaProperties (Spring Boot) und org.springframework.cloud.stream.binder.kafka.properties.KafkaBinderConfigurationProperties (Spring Cloud Stream Binder) verfügbar gemacht.

In der folgenden Liste sind alle unterstützten Konfigurationsoptionen aufgeführt.

  • Die Konfigurationsoptionen für die globale Authentifizierung von Spring Cloud Azure

    • Präfix: spring.cloud.azure
    • Unterstützte Optionen: spring.cloud.azure.credential.*, spring.cloud.azure.profile.*

    Eine vollständige Liste der globalen Konfigurationsoptionen finden Sie im Abschnitt " Globale Eigenschaften ".

  • Allgemeine Konfiguration des Spring Boot Kafka

    • Präfix: spring.kafka.properties.azure
    • Beispiel: spring.kafka.properties.azure.credential.*
  • Konfigurationsoptionen für Spring Kafka-Verbraucher

    • Präfix: spring.kafka.consumer.properties.azure
    • Beispiel: spring.kafka.consumer.properties.azure.credential.*
  • Konfigurationsoptionen für Spring Kafka-Hersteller

    • Präfix: spring.kafka.producer.properties.azure
    • Beispiel: spring.kafka.producer.properties.azure.credential.*
  • Konfigurationsoptionen für Spring Kafka-Administratoren

    • Präfix: spring.kafka.admin.properties.azure
    • Beispiel: spring.kafka.admin.properties.azure.credential.*
  • Allgemeine Konfiguration von Spring Cloud Stream Kafka Binder

    • Präfix: spring.cloud.stream.kafka.binder.configuration.azure
    • Beispiel: spring.cloud.stream.kafka.binder.configuration.azure.credential.*
  • Spring Cloud Stream Kafka Binder Consumer Configuration

    • Präfix: spring.cloud.stream.kafka.binder.consumer-properties.azure
    • Beispiel: spring.cloud.stream.kafka.binder.consumer-properties.azure.credential.*
  • Konfiguration des Spring Cloud Stream Kafka Binder-Herstellers

    • Präfix: spring.cloud.stream.kafka.binder.producer-properties.azure
    • Beispiel: spring.cloud.stream.kafka.binder.producer-properties.azure.credential.*
  • Konfigurationskonfiguration für Spring Cloud Stream Kafka Binder

    • Präfix: Nicht unterstützt, sollte Spring Boot Kafka häufig oder Administratorkonfiguration verwenden.

In der folgenden Tabelle sind die allgemeinen Konfigurationsoptionen für Spring Boot Kafka aufgeführt:

Name BESCHREIBUNG
spring.kafka.properties.azure.credential.client-certificate-password Kennwort der Zertifikatdatei.
spring.kafka.properties.azure.credential.client-certificate-path Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.kafka.properties.azure.credential.client-id Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine Legacyeigenschaft.
spring.kafka.properties.azure.credential.client-secret Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine Legacyeigenschaft.
spring.kafka.properties.azure.credential.managed-identity-enabled Gibt an, ob verwaltete Identität für die Authentifizierung mit Azure aktiviert werden soll. Wenn "true " und " client-id festgelegt" festgelegt ist, wird die Client-ID als vom Benutzer zugewiesene verwaltete Identitätsclient-ID verwendet. Der Standardwert ist false.
spring.kafka.properties.azure.credential.password Kennwort, das beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
spring.kafka.properties.azure.credential.username Benutzername, der beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
spring.kafka.properties.azure.profile.environment.active-directory-endpoint Der Azure Active Directory-Endpunkt, mit dem eine Verbindung hergestellt werden soll.
spring.kafka.properties.azure.profile.tenant-id Mandanten-ID für Azure-Ressourcen.

Hinweis

Die Konfigurationsoptionen in verschiedenen Ebenen gelten für die folgenden Regeln. Die spezifischeren Konfigurationsoptionen haben höhere Priorität als die gängigen. Beispiel:

  • Die allgemeinen Konfigurationsoptionen von Spring Kafka ersetzen die globalen Optionen.
  • Spring Kafka Consumer Configuration Options ersetzt die allgemeinen Optionen.
  • Die Konfigurationsoptionen des Frühjahrs-Kafka-Herstellers ersetzen die allgemeinen Optionen.
  • Spring Kafka-Administratorkonfigurationsoptionen ersetzen die allgemeinen Optionen.
  • Die Optionen für Spring Cloud Stream Kafka Binder sind wie oben dargestellt.

Konfigurierbare Eigenschaften beim Verwenden der Kafka-Unterstützung mit nur einer Verbindungszeichenfolgenauthentifizierung

Die folgende Tabelle zeigt die allgemeinen Konfigurationsoptionen für Spring Boot Event Hubs für Kafka:

Eigenschaft BESCHREIBUNG
spring.cloud.azure.eventhubs.kafka.enabled Gibt an, ob die Azure Event Hubs Kafka-Unterstützung aktiviert werden soll. Der Standardwert lautet true.
spring.cloud.azure.eventhubs.connection-string Azure Event Hubs Verbindungszeichenfolge. Geben Sie diesen Wert an, wenn Sie die Verbindungszeichenfolge direkt bereitstellen möchten.
spring.cloud.azure.eventhubs.namespace Azure Event Hubs Namespace. Geben Sie diesen Wert an, wenn Sie die Verbindungsinformationen über Azure Resource Manager abrufen möchten.
spring.cloud.azure.eventhubs.resource.resource-group Die Ressourcengruppe Azure Event Hubs Namespace. Geben Sie diesen Wert an, wenn Sie die Verbindungsinformationen über Azure Resource Manager abrufen möchten.
spring.cloud.azure.profile.subscription-id Die Abonnement-ID. Geben Sie diesen Wert an, wenn Sie die Verbindungsinformationen über Azure Resource Manager abrufen möchten.

Einrichten von Abhängigkeiten

Fügen Sie dem Projekt die folgende Abhängigkeit hinzu. Dies schließt automatisch die spring-boot-starter Abhängigkeit in Ihrem Projekt transitiv ein.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>

Hinweis

Denken Sie daran, die BOM spring-cloud-azure-dependencies zusammen mit der obigen Abhängigkeit hinzuzufügen. Ausführliche Informationen finden Sie im Abschnitt "Erste Schritte ".

Grundlegende Verwendung

In den folgenden Abschnitten werden die klassischen Verwendungsszenarien der Spring Boot-Anwendung angezeigt.

Verwenden der OAuth-Authentifizierung

Wenn Sie die von Spring Cloud Azure für Kafka bereitgestellte OAuth-Authentifizierung verwenden, können Sie die spezifischen Anmeldeinformationen mithilfe der oben genannten Konfigurationen konfigurieren. Alternativ können Sie nichts über Anmeldeinformationen konfigurieren, in diesem Fall lädt Spring Cloud Azure die Anmeldeinformationen aus der Umgebung. In diesem Abschnitt werden die Verwendungen beschrieben, die die Anmeldeinformationen aus der Azure CLI-Umgebung oder der Azure Spring Apps-Hostingumgebung laden.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden möchten, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie den Abschnitt "Autorisieren" mit Azure Active Directory , um sicherzustellen, dass dem Sicherheitsprinzipal die ausreichende Berechtigung für den Zugriff auf die Azure-Ressource gewährt wurde.

Im folgenden Abschnitt werden die Szenarien beschrieben, in denen verschiedene Spring-Ökosystembibliotheken mit OAuth-Authentifizierung verwendet werden.

Unterstützung der Spring Kafka-Anwendung

In diesem Abschnitt wird das Verwendungsszenario für die Spring Boot-Anwendung mithilfe der Spring Kafka- oder Spring Integration Kafka-Bibliothek beschrieben.

Einrichten von Abhängigkeiten
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<!-- Using Spring Kafka library only-->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:2.8.6-->
</dependency>
<!-- Using Spring Integration library only -->
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:5.5.12-->
</dependency>

Aktualisierung der Konfiguration

Um die OAuth-Authentifizierung zu verwenden, geben Sie einfach den Endpunkt für Event Hubs an, wie im folgenden Beispiel gezeigt:

spring.kafka.bootstrap-servers=<NAMESPACENAME>.servicebus.windows.net:9093
Unterstützung von Spring Cloud Stream-Ordnern Kafka

In diesem Abschnitt wird das Verwendungsszenario für Spring Boot-Anwendungen mithilfe der Bibliothek "Spring Cloud Stream"-Ordner Kafka beschrieben.

Einrichten von Abhängigkeiten
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-kafka</artifactId>
    <version>{version}</version><!--Need to be set, for example:3.2.3-->
</dependency>
Konfiguration

Um die OAuth-Authentifizierung zu verwenden, geben Sie einfach den Endpunkt für Event Hubs an, und com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfigurationgeben Sie wie im folgenden Beispiel gezeigt folgendes Beispiel an:

spring.cloud.stream.kafka.binder.brokers=<NAMESPACENAME>.servicebus.windows.net:9093
spring.cloud.stream.binders.kafka.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration

Hinweis

Legen Sie fest com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration , dass der gesamte OAuth-Authentifizierungsworkflow aktiviert wird.

Beispiele

Sehen Sie sich das Azure-spring-boot-samples-Repository auf GitHub an.

Verwenden der Verbindungszeichenfolgenauthentifizierung

Sie können die Verbindungszeichenfolgenauthentifizierung direkt verwenden oder die Azure-Resource Manager verwenden, um die Verbindungszeichenfolge abzurufen.

Hinweis

Seit Version 4.3.0 ist die Verbindungszeichenfolgenauthentifizierung zugunsten von OAuth-Authentifizierungen veraltet.

Einrichten von Abhängigkeiten

Fügen Sie die folgenden Abhängigkeiten hinzu, wenn Sie Ihre Apache Kafka-Anwendung migrieren möchten, um Azure Event Hubs für Kafka zu verwenden.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
</dependency>

Wenn Sie die Verbindungszeichenfolge mithilfe von Azure Resource Manager abrufen möchten, fügen Sie die folgende Abhängigkeit hinzu:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-resourcemanager</artifactId>
</dependency>
Konfiguration
Verwenden der Verbindungszeichenfolge für Event Hubs direkt

Die einfachste Möglichkeit zum Herstellen einer Verbindung mit Event Hubs für Kafka besteht aus der Verbindungszeichenfolge. Fügen Sie einfach die folgende Eigenschaft hinzu.

spring.cloud.azure.eventhubs.connection-string=${AZURE_EVENTHUBS_CONNECTION_STRING}
Verwenden von Azure Resource Manager zum Abrufen von Verbindungszeichenfolgen

Wenn Sie die Verbindungszeichenfolge in Ihrer Anwendung nicht konfigurieren möchten, können Sie Azure Resource Manager verwenden, um die Verbindungszeichenfolge abzurufen. Um sich mit Azure Resource Manager zu authentifizieren, können Sie auch Anmeldeinformationen verwenden, die in Azure CLI oder ein anderes lokales Entwicklungstool wie Visual Studio Code oder Intellij IDEA gespeichert sind. Alternativ können Sie verwaltete Identität verwenden, wenn Ihre Anwendung in Azure Cloud bereitgestellt wird. Achten Sie einfach darauf, dass der Prinzipal über ausreichende Berechtigung zum Lesen von Ressourcenmetadaten verfügt.

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie den Abschnitt " Autorisieren" mit Azure Active Directory , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Um Azure Resource Manager zum Abrufen der Verbindungszeichenfolge zu verwenden, fügen Sie einfach die folgende Eigenschaft hinzu.

spring:
  cloud:
    azure:
      profile:
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      eventhubs:
        namespace: ${AZURE_EVENTHUBS_NAMESPACE}
        resource:
          resource-group: ${AZURE_EVENTHUBS_RESOURCE_GROUP}

Beispiele

Siehe das Azure-spring-boot-samples-Repository auf GitHub.

Entfernen von Anmeldeinformationen aus Spring Kafka-Anwendungen

Sie können den Event Hubs Kafka-Endpunkt in Ihrer Spring Kafka-Anwendung verwenden. Von Spring Cloud Azure 4.3.0 können Sie Ihre Anwendung ohne Anmeldeinformationen konfigurieren und ausführen. Dieser Artikel ist ein Migrationshandbuch zum Entfernen von Anmeldeinformationen aus Spring Kafka-Anwendungen.

Aktualisieren von Abhängigkeiten

Fügen Sie zuerst die spring-cloud-azure-dependencies BOM hinzu, wie im folgenden Beispiel gezeigt:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-dependencies</artifactId>
      <version>${version.spring.cloud.azure}</version> <!-- The version for spring-cloud-azure-dependencies is 4.3.0+. -->
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Fügen Sie dann den Spring Cloud Azure-Starter hinzu, wie im folgenden Beispiel gezeigt:

<dependencies>
  <dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter</artifactId>
  </dependency>
</dependencies>

Aktualisieren der Konfiguration

Wenn Sie Spring Kafka verwenden, entfernen Sie die folgenden Optionen, wenn Sie angepasste Werte haben:

  • spring.kafka.security.protocol
  • spring.kafka.security.properties.sasl.mechanism
  • spring.kafka.security.properties.sasl.jaas.config

Die endgültige Konfiguration sollte wie das folgende Beispiel aussehen:

spring.kafka.bootstrap-servers=<NAMESPACENAME>.servicebus.windows.net:9093

Wenn Sie Spring Cloud Stream Binder Kafka verwenden, entfernen Sie die folgenden Optionen, wenn Sie angepasste Werte haben:

  • spring.kafka.security.protocol
  • spring.kafka.security.properties.sasl.mechanism
  • spring.kafka.security.properties.sasl.jaas.config
  • spring.cloud.stream.kafka.configuration.security.protocol
  • spring.cloud.stream.kafka.configuration.sasl.mechanism
  • spring.cloud.stream.kafka.configuration.sasl.jaas.config

Fügen Sie dann die folgende Option hinzu:

  • spring.cloud.stream.binders.kafka.environment.spring.main.sources

Die endgültige Konfiguration sollte wie das folgende Beispiel aussehen:

spring.cloud.stream.kafka.binder.brokers=<NAMESPACENAME>.servicebus.windows.net:9093
spring.cloud.stream.binders.kafka.environment.spring.main.sources=com.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration

Hinweis

Die spring.cloud.stream.binders.kafka.environment.spring.main.sources Option wird verwendet, um die zusätzliche Konfiguration KafkaBinderConfigurationPropertiesBeanPostProcessor anzugeben, mit der die OAuth-Sicherheitsparameter für den bestimmten Ordner angegeben werden.

Lokales Ausführen

Erteilen von Berechtigungen

Mit Azure AD können Sie azure role-based Access Control (Azure RBAC) verwenden, um Berechtigungen für einen Sicherheitsprinzipal zu gewähren, was möglicherweise ein Benutzer oder ein Anwendungsdienstprinzipal sein kann.

Da Azure Event Hubs azure role-basierte Zugriffssteuerung unterstützt, müssen Sie die entsprechenden Datenebenenrollen dem Sicherheitsprinzipal zuweisen, den Sie verwenden, wenn Sie Daten lesen oder schreiben möchten. In diesem Artikel verwenden Sie eine Azure CLI-Anmeldeinformationen, um eine Verbindung mit Azure Event Hubs herzustellen, sodass Sie Rollen einem Azure CLI-Konto zuweisen müssen. Weitere Informationen zum Zuweisen von Zugriffsrollen finden Sie unter Autorisieren des Zugriffs auf Event Hubs-Ressourcen mithilfe von Azure Active Directory.

Hinweis

Legen Sie für den Datenzugriff die Datenebenenzugriffsrolle fest: Azure Event Hubs Datensender und Azure Event Hubs Datenempfänger.

Anmelden bei Ihrem Azure-Konto

Um die Azure CLI-Anmeldeinformationen zu verwenden, verwenden Sie zuerst den Azure CLI-Befehl az login , um sich anzumelden. Erstellen und testen Sie dann Ihre Anwendung.

Hinweis

Wenn Sie andere lokale Umgebungsanmeldeinformationen verwenden möchten, z. B. mit IntelliJ, finden Sie unter Spring Cloud Azure Authentication.

Bereitstellen in Azure Spring Apps

In diesem Abschnitt wird beschrieben, wie Sie die Anwendung lokal ausführen. In der Produktion können Sie die Anwendung in Azure-Hostingumgebungen wie Azure Spring Apps bereitstellen.

Erstellen und Konfigurieren von verwalteter Identität

Um eine Verbindung mit verwalteten Identitäten herzustellen, aktivieren Sie die verwaltete Identität in Azure Spring Apps, und gewähren Sie die Zugriffsberechtigungen. Weitere Informationen finden Sie unter Erstellen und Konfigurieren einer verwalteten Identität auf Azure-Hostingdiensten. Informationen zum Zuweisen von Rollen zur verwalteten Identität finden Sie unter Zuweisen von Azure-Rollen mithilfe der Azure-Portal.

Hinweis

Legen Sie für den Datenzugriff die Datenebenenzugriffsrolle fest: Azure Event Hubs Datensender und Azure Event Hubs Datenempfänger.

Bereitstellen in Azure Spring Apps

Weitere Informationen finden Sie unter Bereitstellen einer Anwendung für Azure-Hostingdienste.

Redis-Unterstützung

Stellen Sie eine Verbindung mit Azure Cache for Redis mithilfe von Spring Redis-Bibliotheken her. Wenn Sie Ihre Anwendung hinzufügen und zu Ihrer Anwendung hinzufügenspring-cloud-azure-starter, ist es möglich, die Azure Cache for Redis Verbindungsinformationen über Azure Resource Manager zu lesen und spring-cloud-azure-resourcemanager die Redis-Eigenschaften automatisch zu konfigurieren.

Setup für Abhängigkeiten

Fügen Sie die folgenden Abhängigkeiten hinzu, wenn Sie die Spring Cloud Redis-Unterstützung für Ihre Spring Boot-Anwendung mithilfe von Redis verwenden möchten.

<dependencies>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-resourcemanager</artifactId>
    </dependency>
</dependencies>

Konfiguration

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um Azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie "Autorisieren" mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Konfigurierbare Eigenschaften bei Verwendung von Redis-Unterstützung:

Eigenschaft BESCHREIBUNG Standardwert Erforderlich
spring.cloud.azure.redis.enabled Ob ein Azure Cache for Redis aktiviert ist. true Nein
spring.cloud.azure.redis.name Azure Cache for Redis Instanzname. Ja
spring.cloud.azure.redis.resource.resource-group Die Ressourcengruppe von Azure Cache for Redis. Ja
spring.cloud.azure.profile.subscription-id Die Abonnement-ID. Ja

Hinweis

Authentifizierungsinformationen sind auch für die Authentifizierung für Azure Resource Manager erforderlich. Die zugehörigen Konfigurationen von Resource Manager sollten unter Präfix spring.cloud.azurekonfiguriert werden. Weitere Informationen finden Sie im Abschnitt " Authentifizierung ".

Grundlegende Verwendung

Fügen Sie die folgenden Eigenschaften hinzu, und Sie sind gut zu wechseln.

spring.cloud.azure.redis.name=${AZURE_CACHE_REDIS_NAME}
spring.cloud.azure.redis.resource.resource-group=${AZURE_CACHE_REDIS_RESOURCE_GROUP}

Beispiele

Weitere Details finden Sie unter azure-spring-boot-samples .

Azure Resource Manager

Azure Resource Manager (ARM) ist der Bereitstellungs- und Verwaltungsdienst für Azure. Er bietet eine Verwaltungsebene, die das Erstellen, Aktualisieren und Löschen von Ressourcen in Ihrem Azure-Konto ermöglicht. Spring Cloud Azure Resource Manager kann Ressourcen bereitstellen oder Ressourcenmetadaten abrufen.

Setup für Abhängigkeiten

<dependency>
  <groupId>com.azure.spring</groupId>
  <artifactId>spring-cloud-azure-resourcemanager</artifactId>
</dependency>

Konfiguration

Hinweis

Wenn Sie einen Sicherheitsprinzipal verwenden, um Azure Active Directory für den Zugriff auf eine Azure-Ressource zu authentifizieren und zu autorisieren, lesen Sie "Autorisieren" mit Azure AD , um sicherzustellen, dass der Sicherheitsprinzipal die ausreichende Berechtigung zum Zugriff auf die Azure-Ressource gewährt wurde.

Konfigurierbare Eigenschaften von spring-cloud-azure-resourcemanager:

Eigenschaft BESCHREIBUNG
spring.cloud.azure.resource-manager.enabled Ob die Resource Manager aktiviert ist. Der Standardwert ist "true".
spring.cloud.azure.credential.client-id Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.credential.clientschlüssel Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.credential.client-certificate-path Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.credential.client-certificate-password Kennwort der Zertifikatdatei.
spring.cloud.azure.credential.username Benutzername, der beim Ausführen der Benutzernamen-/Kennwortauthentifizierung mit Azure verwendet werden soll.
spring.cloud.azure.credential.password Kennwort, das beim Ausführen der Benutzernamen-/Kennwortauthentifizierung verwendet werden soll.
spring.cloud.azure.credential.managed-identity-enabled Gibt an, ob verwaltete Identität aktiviert werden soll.
spring.cloud.azure.profile.cloud-type Name der Azure-Cloud, mit der eine Verbindung hergestellt werden soll.
spring.cloud.azure.profile.environment.active-directory-endpoint Der Azure Active Directory-Endpunkt, mit dem eine Verbindung zur Authentifizierung hergestellt werden soll.
spring.cloud.azure.profile.subscription-id Abonnement-ID, die beim Herstellen einer Verbindung mit Azure-Ressourcen verwendet werden soll.
spring.cloud.azure.profile.tenant-id Mandanten-ID für Azure-Ressourcen.
spring.cloud.azure.azure-service.namespace Der Namespace des Azure-Diensts, mit dem Ressourcen bereitgestellt werden sollen.
spring.cloud.azure.azure-service.resource.resource-group Die Ressourcengruppe, die eine Azure-Dienstressource hält.

Grundlegende Verwendung

Spring Cloud Azure Resource Manager kann zusammen mit bestimmten Spring Cloud Azure-Startern zusammenarbeiten, um Verbindungsinformationen wie Verbindungszeichenfolgen abzurufen, um eine Verbindung mit Azure-Diensten herzustellen. Sie kann auch mit spring-cloud-azure-starter und Drittanbieterbibliotheken zusammenarbeiten, um Metadaten wie Benutzername/Kennwort abzurufen und die Authentifizierung abzuschließen. Weitere Informationen finden Sie in den Abschnitten "Kafka Support " und "Redis Support ".

Um beispielsweise die Verbindungszeichenfolge eines Azure-Diensts abzurufen, können Entwickler einen Dienstprinzipal als Anmeldeinformationen verwenden, um die Verbindungszeichenfolge zu authentifizieren und abzurufen. Die Konfiguration wird wie folgt aufgeführt. Der bereitgestellte Dienstprinzipal sollte mindestens eine Rolle des Contributor zugeordneten Namespaces zugewiesen werden. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit Azure AD , um sicherzustellen, dass dem Prinzipal die ausreichende Berechtigung für den Zugriff auf die Azure-Ressource erteilt wurde.

spring:
  cloud:
    azure:
      credential:
        client-id: ${AZURE_CLIENT_ID}
        client-secret: ${AZURE_CLIENT_SECRET}
      profile:
        tenant-id: ${AZURE_TENANT_ID}
        subscription-id: ${AZURE_SUBSCRIPTION_ID}
      <azure-service>:
        namespace: ${SERVICEBUS_NAMESPACE}
        resource:
          resource-group: ${RESOURCE_GROUP}

Beispiele

Weitere Informationen finden Sie in azure-spring-boot-samples .

Konfigurationseigenschaften

Informationen zur Liste aller zugehörigen Konfigurationseigenschaften von Spring Cloud Azure finden Sie im Anhang zu Spring Cloud Azure.

Anhang