メッセージ駆動型 - SpringCloud Stream

ストリームの紹介

Spring Cloud Stream は、メッセージ駆動型のマイクロサービス アプリケーションを構築するためのフレームワークであり、さまざまなミドルウェアの合理的な構成を提供します。

Spring Cloud Stream には、次の中心的な概念が含まれています。

  • Destination Binders: 宛先バインダー。ターゲットは Kafka または RabbitMQ を指します。バインダーは、ターゲットのミドルウェアをカプセル化するパッケージです。Kafka を操作している場合は Kafka Binder を使用します。RabbitMQ を操作している場合は、RabbitMO Binder を使用します。
  • バインディング: 外部メッセージング システムとアプリケーション間のブリッジであり、メッセージの「プロデューサー」と「コンシューマー」を提供します (ターゲット バインダーによって作成されます)。
  • メッセージ: プロデューサとコンシューマが外部メッセージング システムを通じてターゲット バインダーや他のアプリケーションと通信する際に基づく標準化されたデータ構造

アプリケーションは入力または出力を通じて Spring Cloud Stream の Binder と対話し、Binder 層はミドルウェアとの通信と構成によるバインディングを担当します。Binder を中間層として定義することにより、アプリケーションとメッセージ ミドルウェアの詳細の間の分離が実現され、アプリケーションはさまざまなメッセージ ミドルウェアの実装を考慮する必要がなくなりました。メッセージ ミドルウェアをアップグレードするか、他のメッセージ ミドルウェア製品を置き換える必要がある場合は、対応するバインダーを置き換えるだけで済みます。

ここに画像の説明を挿入します


Stream 整合 kafka

Kafka を例に挙げると、必ず Kafka をインストールして起動してください。

プロデューサー プロジェクトとコンシューマー プロジェクトを別々に作成し、それぞれ依存関係を追加します。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
1.プロデューサーを作成する

MqSource インターフェースの開発

public interface MqSource {
    
    

    @Output("test-topic")
    MessageChannel testTopic();

    @Output("test-topic-2")
    MessageChannel testTopic2();
}

@Outputおよびアノテーションを使用して@Inputメッセージ入力チャネルと出力チャネルの名前定義を定義します。出力チャネルは、メッセージ チャネルにメッセージを送信するメソッドを定義する MessageChannel インターフェイス オブジェクトを返す必要があります。@Inputデフォルトでは、チャネルの名前はアノテーションが付けられたメソッドの名前です。チャネル名を自分で定義することもできます。文字列型パラメータのチャネル名をとアノテーションに渡すだけです@Output。ここでは、2 つのチャネルは と として指定されていtest-topicますtest-topic-2

MsgProducer クラスの開発

@Slf4j
@EnableBinding(MqSource.class)
public class MsgProducer {
    
    

    @Autowired
    private MqSource mqSource;

    public void sendTestTopicMessage(String msg) {
    
    
        try {
    
    
            mqSource.testTopic().send(MessageBuilder.withPayload(msg).build());
        } catch (Exception e) {
    
    
            log.error("sendTestTopicMessage error", e);
        }
    }

    public void sendTestTopic2Message(String msg) {
    
    
        try {
    
    
            mqSource.testTopic2().send(MessageBuilder.withPayload(msg).build());
        } catch (Exception e) {
    
    
            log.error("sendTestTopic2Message error", e);
        }
    }
}

@EnableBindingチャネルの作成とバインドに使用します。チャネルのバインドとは、チャネルを Kafka、RabbiMQ などのバインダーにバインドすることを意味します。クラスパス上に Binder が 1 つだけある場合、Spring Cloud Stream は設定なしでそれを見つけてバインドします。複数ある場合は、明示的に構成する必要があります

MqSource インターフェース メソッドを呼び出して出力チャネル オブジェクトを取得し、次に send メソッドを呼び出してデータを送信します。send メソッドは Message オブジェクトを受け取ります。このオブジェクトは直接作成できないため、MessageBuilder を使用して取得する必要があります。

2. コンシューマの作成
public interface MqSink {
    
    

    @Input("test-topic")
    MessageChannel testTopic();

    @Input("test-topic-2")
    MessageChannel testTopic2();
}

プロデューサーにMqSource似てる

MsgReceiver クラスを開発します。@StreamLisiener受け取ったパラメータは処理対象のチャネルの名前です。アノテーションが付けられたメソッドはチャネルから取得したデータを処理するメソッドです。メソッドのパラメータは取得したデータです。

@Slf4j
@EnableBinding(MqSink.class)
public class MsgReceiver {
    
    

    @StreamListener("test-topic")
    public void testTopicMessageListen(String msg) {
    
    
        log.info("testTopicMessageListen: {}", msg);
    }

    @StreamListener("test-topic-2")
    public void testTopic2MessageListen(String msg) {
    
    
        log.info("testTopic2MessageListen: {}", msg);
    }
}

おすすめ

転載: blog.csdn.net/CSDN_handsome/article/details/133499801