5.16. リアクティブアプリケーションでの Kafka の使用
この例は、Reactor Netty 上の Spring Boot および Eclipse Vert.x で Apache Kafka を使用するメッセージングアプリケーションのサンプルを作成する方法を示しています。アプリケーションはメッセージを Kafka トピックに公開してから、リクエストの送信時にメッセージを取得して表示します。
Kafka クラスターによって使用されるメッセージトピック、URL、およびメタデータの Kafka 設定プロパティーは src/main/resources/application.yml に保存されます。
前提条件
- Spring Boot を使用するよう設定された Maven ベースの Java アプリケーションプロジェクト
- JDK 8 または JDK 11 がインストールされている。
- Maven がインストールされている。
手順
WebFlux HTTP Starter および Apache Kafka Starter をアプリケーションプロジェクトの
pom.xmlファイルに依存関係として追加します。pom.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
KafkaLoggerクラスを作成します。このクラスはプロデューサーと sendas メッセージを機能させます。KafkaLoggerクラスは、Producer がメッセージ (別名レコード) をトピックに公開する方法を定義します。/src/main/java/KafkaLogger.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KafkaLogクラスを作成します。このクラスは、kafka メッセージのコンシューマーとして機能します。KafkaLogは、トピックからメッセージを取得してターミナルに表示されるメッセージを取得します。/src/main/java/KafkaLog.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP REST コントローラーが含まれるクラスファイルを作成します。アプリケーションがメッセージのロギングや読み取りを処理するために使用する REST リソースを公開するコントローラー。
/src/main/java/Controller.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apache Kafka Cluster のプロデューサーおよびコンシューマーが使用する URL が含まれる YAML テンプレートを作成して、メッセージのログおよび読み取りを行います。この例では、Apache Kafka Cluster のコンシューマーおよびプロデューサーは、デフォルトで
localhostでポート9092を使用して通信します。以下の例に示すように、プロデューサーとコンシューマーを個別に設定する必要があります。/src/main/resources/application.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: アプリケーションをローカルで実行し、テストします。
Maven プロジェクトのルートディレクトリーへ移動します。
cd vertx-spring-boot-sample-kafka
$ cd vertx-spring-boot-sample-kafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションをパッケージ化します。
mvn clean package
$ mvn clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドラインからアプリケーションを起動します。
java -jar target/vertx-spring-boot-sample-kafka.jar
$ java -jar target/vertx-spring-boot-sample-kafka.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいターミナルウィンドウで、テキスト文字列としてフォーマットされたメッセージが含まれる HTTP
POSTリクエストをlocalhostに送信します。メッセージはすべてlogトピックに公開されます。curl -H "Content-Type: text/plain" -d 'Hello, World' -X POST http://localhost:8080 curl -H "Content-Type: text/plain" -d 'Hello again' -X POST http://localhost:8080
$ curl -H "Content-Type: text/plain" -d 'Hello, World' -X POST http://localhost:8080 $ curl -H "Content-Type: text/plain" -d 'Hello again' -X POST http://localhost:8080 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP
GET要求をlocalhostに送信します。コンシューマーがサブスクライブするトピック内の全メッセージが含まれる HTTP 応答を受け取ります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
その他のリソース
- Fabric8 Maven プラグインを使用して、アプリケーションを OpenShift クラスターにデプロイ できます。
- また、スタンドアロンの Red Hat Enterprise Linux でのデプロイメント 用にアプリケーションを設定することもできます。
サンプルを使用 する他に、Eclipse Vert.x と Spring Boot を使用して、ゼロから新しい Spring Boot アプリケーションを作成し、それらを OpenShift にデプロイすることもできます。