ストリームの紹介
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);
}
}