カテゴリ: Quarkus 更新日: 2026/02/06

QuarkusとAMQP連携の基本完全ガイド|RabbitMQ・ActiveMQで学ぶイベント駆動開発入門

QuarkusとAMQP(RabbitMQ/ActiveMQ)連携の基本
QuarkusとAMQP(RabbitMQ/ActiveMQ)連携の基本

Quarkus / AMQP / RabbitMQ / ActiveMQ / イベント駆動開発 / Reactive Messaging / Java 初心者向け


先生と生徒の会話形式で理解しよう

生徒

「Quarkusでイベント駆動開発をやりたいんですが、AMQPって何ですか?」

先生

「AMQPは、アプリ同士がメッセージをやり取りするための共通ルールです。QuarkusではRabbitMQやActiveMQと組み合わせて、イベント駆動開発ができます。」

生徒

「REST APIと何が違うんですか?」

先生

「リクエストを待つのではなく、出来事が起きたら自動で処理が流れる点が大きな違いです。順番に見ていきましょう。」

1. Quarkusにおけるイベント駆動開発とは

1. Quarkusにおけるイベント駆動開発とは
1. Quarkusにおけるイベント駆動開発とは

Quarkusのイベント駆動開発とは、ある出来事をきっかけに処理が自動で実行される設計手法です。 ユーザー登録、注文完了、データ更新などをイベントとして扱い、アプリ同士を疎結合に保てます。 従来の同期的なREST APIと異なり、処理の流れを止めずに非同期で動くため、スケーラブルで高速なシステムを構築できます。 クラウドネイティブやマイクロサービスと非常に相性が良い点も特徴です。

2. AMQPの基本概念をやさしく理解する

2. AMQPの基本概念をやさしく理解する
2. AMQPの基本概念をやさしく理解する

AMQPはメッセージングの共通仕様で、送信側と受信側の間にメッセージブローカーが存在します。 送信側はメッセージを投げるだけで、誰が受け取るかを意識しません。 受信側はキューに届いたメッセージを順番に処理します。 この仕組みにより、システム変更に強く、障害にも耐えやすい構成になります。

RabbitMQやActiveMQは、このAMQPを実装した代表的なメッセージブローカーです。

3. QuarkusとRabbitMQ・ActiveMQの関係

3. QuarkusとRabbitMQ・ActiveMQの関係
3. QuarkusとRabbitMQ・ActiveMQの関係

QuarkusではSmallRye Reactive Messagingを利用して、AMQPと簡単に連携できます。 RabbitMQやActiveMQの違いを意識せず、設定とアノテーションだけでメッセージ送受信が可能です。 Java初心者でも、シンプルなコードでイベント駆動開発を体験できます。

4. AMQP送信側の基本実装

4. AMQP送信側の基本実装
4. AMQP送信側の基本実装

まずはイベントを送信する側の基本コードです。 処理が完了したタイミングでメッセージを送信するイメージになります。


import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Channel;
import org.eclipse.microprofile.reactive.messaging.Emitter;

@ApplicationScoped
public class OrderEventProducer {

    @Channel("order-out")
    Emitter<String> emitter;

    public void sendOrder(String message) {
        emitter.send(message);
    }
}

このコードでは、注文が発生したというイベントをAMQPへ送信しています。 REST APIと違い、相手の処理を待たずに次の処理へ進めます。

5. AMQP受信側の基本実装

5. AMQP受信側の基本実装
5. AMQP受信側の基本実装

次はメッセージを受け取る側です。 キューにメッセージが届いた瞬間に、自動で処理が実行されます。


import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.reactive.messaging.Incoming;

@ApplicationScoped
public class OrderEventConsumer {

    @Incoming("order-in")
    public void receive(String message) {
        System.out.println("受信した注文イベント: " + message);
    }
}

ポーリング処理を書かなくても、イベントが届けば自動的に動く点が大きな特徴です。

6. application.propertiesの基本設定

6. application.propertiesの基本設定
6. application.propertiesの基本設定

Quarkusでは設定ファイルに接続情報を書くだけで、AMQPと連携できます。 初心者でも設定の全体像を把握しやすいのが魅力です。


mp.messaging.outgoing.order-out.connector=smallrye-amqp
mp.messaging.outgoing.order-out.address=orders

mp.messaging.incoming.order-in.connector=smallrye-amqp
mp.messaging.incoming.order-in.address=orders

amqp-host=localhost
amqp-port=5672
amqp-username=guest
amqp-password=guest

7. イベント駆動開発で得られるメリット

7. イベント駆動開発で得られるメリット
7. イベント駆動開発で得られるメリット

QuarkusとAMQPを組み合わせることで、処理の分離、拡張のしやすさ、障害耐性が向上します。 新しい機能を追加しても、既存システムに影響を与えにくくなります。 特にマイクロサービス構成では、この考え方が大きな力を発揮します。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

メッセージが届かない場合は、キュー名や設定の不一致が原因であることが多いです。 まずは送信と受信で同じアドレスを使っているかを確認しましょう。 ローカル環境ではRabbitMQの起動忘れにも注意が必要です。

カテゴリの一覧へ
新着記事
New1
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New2
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New3
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
New4
Micronaut
Micronautで非同期HTTP処理を行う方法!リアクティブ対応の基礎知識
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.5
Java&Spring記事人気No5
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.6
Java&Spring記事人気No6
Java
Java Optional ifPresentの使い方を徹底解説!nullチェックをスマートに省略する方法
No.7
Java&Spring記事人気No7
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.8
Java&Spring記事人気No8
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?