この記事では、Spring Cloud Azure と Spring Messaging Azure Event Hubs を使用する方法について説明します。 Spring Framework は、メッセージング システムとの統合を広範にサポートします。
Spring Messaging Azure Event Hubs (スプリング メッセージング アジュール イベント ハブ)
重要な概念
Azure Event Hubs は、クラウド内のネイティブ データ ストリーミング サービスであり、任意のソースから任意の宛先まで、待機時間が短く、1 秒あたり何百万ものイベントをストリーミングできます。 Azure Event Hubs の Spring Messaging プロジェクトは、Spring の主要な概念をイベント ハブベースのメッセージング ソリューションの開発に適用します。 これは、メッセージを送信するための高度な抽象化として @EventHubsListener 注釈と リスナー コンテナーを使用した、メッセージ駆動型のプレーンな古い Java オブジェクト (POJO) のサポートも提供します。 これらのライブラリは、依存関係の挿入と宣言型の構成の使用を促進します。 いずれの場合も、Spring Framework の JMS サポートと Spring AMQP の RabbitMQ サポートとの類似点を確認できます。
依存関係のセットアップ
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-eventhubs</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>
コンフィギュレーション
ライブラリには、EventHubsTemplate と @EventHubsListenerに関する次の構成オプションが用意されています。
| プロパティ | タイプ | 説明 |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
ブーリアン | 分離された ObjectMapper Bean が Event Hubs メッセージ コンバーターに使用されるかどうか。 既定で有効になっています。 |
spring.cloud.azure.eventhubs.enabled |
ブーリアン | Azure Event Hubs が有効になっているかどうか。 |
spring.cloud.azure.eventhubs.connection-string |
糸 | Event Hubs 名前空間の接続文字列の値。 |
spring.cloud.azure.eventhubs.namespace |
糸 | Event Hubs 名前空間の値。これは FQDN のプレフィックスです。 FQDN は NamespaceName.DomainName で構成する必要があります |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name |
糸 | ストレージ アカウントの名前。 |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key |
糸 | ストレージ アカウントのアクセス キー。 |
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name |
糸 | ストレージ コンテナー名。 |
基本的な使用方法
カスタム Event Hubs メッセージコンバーター
Event Hubs メッセージ コンバーターを構成するには、次の 2 つの方法があります。
既定の Event Hubs メッセージ コンバーターで
ObjectMapperBean を使用するように、次のプロパティを構成します。これは、カスタムObjectMapperBean または Spring Boot によって管理される Bean です。spring: cloud: azure: message-converter: isolated-object-mapper: falseEvent Hubs メッセージ コンバーター Bean を直接定義します。
@Bean AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new EventHubsMessageConverter(jsonMapper); }
Azure Event Hubs にメッセージを送信する
メッセージを送信するには、次の手順に従います。
次のいずれかの方法を使用して、資格情報の構成オプションを入力します。
DefaultAzureCredentialとしての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。spring: cloud: azure: eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT}接続文字列としての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。
spring: cloud: azure: eventhubs: connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT} account-key: ${CHECKPOINT-ACCESS-KEY}資格情報をマネージド ID として使用するには、application.yml ファイルで次のプロパティを構成します。
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}サービス プリンシパルとしての資格情報の場合は、application.yml ファイルで次のプロパティを構成します。
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}
注
tenant-idには、common、organizations、consumers、テナント ID の値を指定できます。 これらの値の詳細については、エラー AADSTS50020 - ID プロバイダーのユーザー アカウントはテナントに存在しません の 間違ったエンドポイント (個人アカウントおよび組織アカウント) セクションを参照してください。 シングルテナント アプリの変換の詳細については、「Microsoft Entra IDでのシングルテナント アプリをマルチテナントに変換する」を参照してください。
EventHubsTemplateは自動的に構成され、次の例に示すように、独自の Bean に直接自動接続できます。@Component public class MyBean { private final EventHubsTemplate eventHubsTemplate; public MyBean(EventHubsTemplate eventHubsTemplate) { this.eventHubsTemplate = eventHubsTemplate; } public void someMethod() { this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
Azure Event Hubs からメッセージを受信する
メッセージを受信するには、次の手順に従います。
資格情報の構成オプションを入力します。
次の例に示すように、
@EnableAzureMessaging注釈を追加します。 この注釈により、@EventHubsListenerで注釈が付けられたメソッドの検出がトリガーされ、メッセージ リスナー コンテナーが内部に作成されます。@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }注
重複を避けるため、バージョン
5.21.0以降、Spring Cloud Azure Auto-configure ではアノテーション@EnableAzureMessagingが自動的に有効になります。Event Hubs インフラストラクチャが存在する場合は、
@EventHubsListenerを使用して任意の Bean に注釈を付けてリスナー エンドポイントを作成できます。 次のコンポーネントは、EVENT_HUB_NAMEイベント ハブと$Defaultコンシューマー グループにリスナー エンドポイントを作成します。@Component public class MyBean { @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default") public void processMessage(String content) { // ... } }
サンプル
詳細については、GitHub の azure-spring-boot-samples リポジトリを参照してください。