ホームページ >Java >&#&チュートリアル >Azure Service Bus と Spring Boot を使用した FIFO メッセージング

Azure Service Bus と Spring Boot を使用した FIFO メッセージング

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-19 02:18:02330ブラウズ

FIFO Messaging with Azure Service Bus and Spring Boot

導入

Azure Service Bus は、分散アプリケーション間の信頼性の高い通信を促進するフルマネージドのメッセージ ブローカーです。先入れ先出し (FIFO) シーケンスの確保など、メッセージを特定の順序で処理する必要があるアプリケーションの場合、Azure Service Bus のセッションはメッセージ処理のための効果的なメカニズムを提供します。

Spring Boot アプリケーションのコンテキストでは、Azure Service Bus トピックのセッションを利用することで、同じセッション ID を持つメッセージが一度に 1 つのコンシューマーによって正しい順序で処理されるようになります。このソリューションは、メッセージの順序を維持しながら高スループットのメッセージング シナリオを処理する場合に特に役立ちます。

このガイドでは、Azure Service Bus からのメッセージを FIFO 順序で消費し、複雑なインフラストラクチャを必要とせずにセッションを使用することで信頼性とスケーラビリティを確保するように Spring Boot アプリケーションを構成する方法について概要を説明します。

実際に

複数のインスタンスにデプロイされた Spring Boot アプリケーションが Azure Service Bus トピックからのメッセージを FIFO 順序で消費する場合、トピックのセッションを使用し、当局間で調整されたセッションを管理するようにアプリケーションを構成できます。その方法は次のとおりです:

1. Azure Service Bus トピックでセッションを有効にする

  • Azure Service Bus トピックサブスクリプションセッション を使用するように構成されていることを確認してください。
  • メッセージを送信するときは、各メッセージに セッション ID を設定して、同じ セッション ID を持つすべてのメッセージが一度に 1 人のコンシューマーのみによって到着順に処理されるようにします。 .

2. Azure SDK を使用して Spring Boot でセッションを管理する

Azure は、メッセージをセッションで正常に消費できるようにする Java 用のライブラリを提供します。ここに 1 つのアプローチがあります:

Azure Service Bus の依存関係を追加する

Spring Boot プロジェクト (Maven の pom.xml) に Azure Service Bus の依存関係を追加します。

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-servicebus</artifactId>
    <version>7.5.0</version> <!-- check for the last version -->
</dependency>

アプリケーションでサービス バスを構成する

Azure Service Bus トピックに接続するようにアプリケーションを構成します。基本的な構成は次のとおりです:

import com.azure.messaging.servicebus.*;

@Service
public class AzureServiceBusConsumer {

    private final String connectionString = "Endpoint=sb://<your-service-bus>.servicebus.windows.net/;SharedAccessKeyName=<key-name>;SharedAccessKey=<key>";
    private final String topicName = "<your-topic>";
    private final String subscriptionName = "<your-subscription>";

    public void startSessionProcessor() {
        ServiceBusClientBuilder clientBuilder = new ServiceBusClientBuilder()
                .connectionString(connectionString);

        ServiceBusProcessorClient processorClient = clientBuilder
                .sessionProcessor() // Using session mode
                .topicName(topicName)
                .subscriptionName(subscriptionName)
                .processMessage(this::processMessage)
                .processError(this::processError)
                .buildProcessorClient();

        // Start session processing in asynchronous mode
        processorClient.start();
    }

    private void processMessage(ServiceBusReceivedMessageContext context) {
        ServiceBusReceivedMessage message = context.getMessage();
        System.out.printf("Processing message from session: %s. Contents: %s%n",
                message.getSessionId(), message.getBody());

        // Process the message here, respecting the order of arrival in the session
        context.complete(); // Mark the message as processed
    }

    private void processError(ServiceBusErrorContext context) {
        System.err.printf("Error occurred while processing: %s%n", context.getException().getMessage());
    }
}

セッションごとに固有の消費を確保する

sessionProcessor() を使用すると、各セッションは一度に 1 つのインスタンスのみによって消費され、インスタンスの数に関係なく、セッション内のメッセージは常に FIFO 順序で処理されます。

3. EC2 インスタンス間の同時実行管理

アプリケーションの複数の EC2 インスタンスが トピック に接続されている場合:

  • Azure Service Bus は、使用可能なコンシューマーにセッションを動的に割り当てます。
  • 各 Spring Boot インスタンスは一度に 1 セッションずつメッセージを受信し、Azure Service Bus はアクティブなセッションが複数のコンシューマーに同時に割り当てられないようにします。
  • これにより、各インスタンスが異なるセッションを並行してサポートする自動スケーリングが可能になります。

4. 導入と回復力

同一の Service Bus 構成を使用して Spring Boot アプリケーションを EC2 インスタンスにデプロイすると、セッションを動的に管理できるようになります。インスタンスがダウンした場合、Azure Service Bus は待機中のセッションを接続されている別の EC2 インスタンスに自動的に再割り当てします。

5. Spring Boot での起動例

Spring Boot アプリケーションの開始時に @PostConstruct を使用してコンシューマーを起動し、セッション内消費を開始します。

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-servicebus</artifactId>
    <version>7.5.0</version> <!-- check for the last version -->
</dependency>

結論

結論として、FIFO メッセージ処理のための Azure Service Bus と Spring Boot アプリケーションの統合は、セッションを利用することで効果的に実現できます。 Azure Service Bus トピックでセッションを有効にし、メッセージを特定のセッション ID に関連付けることにより、各セッション内でメッセージが到着した正確な順序で処理されるようになります。

Azure SDK for Java を使用すると、セッション ベースの方法でメッセージを消費するように Spring Boot アプリケーションを構成でき、各セッションが一度に 1 つのコンシューマーによって処理されることが保証されます。これにより、マルチスレッド環境であってもメッセージの並べ替えのリスクが排除され、信頼性の高い順序付けられた処理が保証されます。

このアプローチは、分散ワークロードの管理における効率と柔軟性を維持しながら、アプリケーションが厳密な FIFO 順序でメッセージを処理することを保証する、スケーラブルで回復力のあるソリューションを提供します。

以上がAzure Service Bus と Spring Boot を使用した FIFO メッセージングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。