QuarkusとKafkaで始めるイベント駆動開発入門!初心者でもできる最初のメッセージ送受信
生徒
「Quarkusでイベント駆動開発ができるって聞いたんですが、Kafkaって何をするものなんですか?」
先生
「QuarkusではKafkaを使って、アプリ同士がメッセージを送り合う仕組みを簡単に作れます。画面の操作とは別に、裏側で処理をつなぐのが特徴です。」
生徒
「設定とか難しそうで不安です……」
先生
「順番に進めれば大丈夫です。QuarkusとKafkaを使った最初のメッセージ送受信を一緒に体験してみましょう。」
1. QuarkusとKafkaによるイベント駆動開発とは
Quarkusのイベント駆動開発は、処理を直接呼び出すのではなく、イベントやメッセージを介して連携する考え方です。Kafkaは分散メッセージング基盤として広く使われており、大量のデータを安全にやり取りできます。QuarkusとKafkaを組み合わせることで、Javaでも軽量かつ高速なイベント駆動アプリケーションを構築できます。
従来の同期的な処理では、片方が止まると全体に影響が出やすくなります。一方、Kafkaを使った非同期な構成では、送信側と受信側が疎結合になり、システム全体の安定性が高まります。初心者にとっても、考え方を理解することで設計の幅が広がります。
2. Kafkaを使う前に知っておきたい基本用語
Kafkaを扱う際には、いくつかの基本的な用語を押さえておく必要があります。メッセージを送る側をプロデューサー、受け取る側をコンシューマーと呼びます。メッセージはトピックという箱のような単位に格納されます。
Quarkusでは、これらをコードで細かく意識しなくても設定ファイルとアノテーションで扱えます。難しい仕組みを内部で肩代わりしてくれるのがQuarkusの強みです。まずは「送る」「受け取る」という流れを理解することが大切です。
3. QuarkusとKafkaの開発環境を準備する
QuarkusとKafkaを試すには、JavaとMavenが動作する環境があれば十分です。Kafka自体はローカルで簡易的に起動できますし、Quarkusの開発モードを使えばすぐに動作確認ができます。ここでは初心者向けに、最小構成で進めます。
Quarkusプロジェクト作成時にKafka関連の拡張機能を追加しておくと、後の設定が楽になります。これにより、Kafkaとの接続やメッセージ処理が自動的に有効化されます。
4. Kafkaへのメッセージ送信を実装する
まずはQuarkusからKafkaへメッセージを送る処理を作ります。送信処理は非常にシンプルで、決められたインターフェースを使って文字列を送信するだけです。これにより、イベントを発生させる側の役割を体験できます。
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Channel;
import org.eclipse.microprofile.reactive.messaging.Emitter;
@ApplicationScoped
public class MessageProducer {
@Channel("sample-out")
Emitter<String> emitter;
public void send(String message) {
emitter.send(message);
}
}
このコードでは、Kafkaのトピックに対応するチャネルへ文字列を送信しています。アプリケーションの中からイベントを投げるイメージを持つと理解しやすくなります。
5. Kafkaからメッセージを受信する
次に、Kafkaからメッセージを受信する側を実装します。受信処理もアノテーションを付けるだけで定義できます。Kafkaの複雑な設定を意識せず、メッセージが届いたら何をするかに集中できます。
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Incoming;
@ApplicationScoped
public class MessageConsumer {
@Incoming("sample-in")
public void receive(String message) {
System.out.println("受信したメッセージ: " + message);
}
}
メッセージがKafkaに届くと、このメソッドが自動的に呼ばれます。イベント駆動開発では、この「何かが起きたら処理する」という考え方が中心になります。
6. application.propertiesでKafka接続を設定する
Quarkusでは設定ファイルにKafkaの接続情報を書くだけで利用できます。トピック名やブローカーのアドレスを指定することで、送受信のひも付けが行われます。初心者でも設定内容を追いやすいのが特徴です。
quarkus.kafka.devservices.enabled=true
mp.messaging.outgoing.sample-out.connector=smallrye-kafka
mp.messaging.outgoing.sample-out.topic=sample-topic
mp.messaging.incoming.sample-in.connector=smallrye-kafka
mp.messaging.incoming.sample-in.topic=sample-topic
この設定により、同じトピックを通してメッセージの送受信が成立します。開発環境では自動でKafkaが起動するため、手動操作は不要です。
7. 動作確認とイベント駆動の流れを理解する
最後に、送信メソッドを呼び出してメッセージが受信されるかを確認します。ログに出力された文字列を見ることで、イベントが正しく流れていることを実感できます。画面操作がなくても処理が進む点がイベント駆動開発の大きな特徴です。
public class SampleRunner {
public static void main(String[] args) {
MessageProducer producer = new MessageProducer();
producer.send("Hello Kafka with Quarkus");
}
}
受信したメッセージ: Hello Kafka with Quarkus
このように、QuarkusとKafkaを使うと、シンプルなコードでイベント駆動開発の第一歩を踏み出せます。複雑な仕組みは内部に隠されているため、初心者でも全体像をつかみやすくなっています。