1概要

この記事では、Spring AMQPフレームワークを使用したAMQPプロトコルを介したメッセージングベースの通信について説明します。まず、メッセージングの重要な概念をいくつか説明し、次に5章の実用的な例に進みます。


1.1. Mavenの依存関係

プロジェクトで

spring-amqp



spring-rabbit

を使用するには、以下の依存関係を追加するだけです。

<dependencies>
    <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-amqp</artifactId>
        <version>1.6.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit</artifactId>
        <version>1.6.6.RELEASE</version>
    </dependency>
</dependencies>

最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7C(g%3A%22org.springframework.amqp%22%20AND%20a%3A%22spring-amqpにあります。 %22)%20OR%20(g%3A%22org.springframework.amqp%22%20AND%20a%3A%22spring-rabbit%22)[Mavenリポジトリ]。

** 2メッセージングベースのコミュニケーション____


__

**

メッセージングは​​、同期要求応答ベースのアーキテクチャではなく非同期メッセージの受け渡しに依存するアプリケーション間通信のための技法です。メッセージのプロデューサとコンシューマは、メッセージブローカとして知られる中間メッセージングレイヤによって分離されています。メッセージブローカーは、メッセージの永続的な保存、メッセージのフィルタリング、メッセージの変換などの機能を提供します。

Javaで書かれたアプリケーション間の相互通信の場合、JMS(Java Message Service)APIはメッセージの送受信に一般的に使用されます。さまざまなベンダーやプラットフォーム間の相互運用性のために、JMSクライアントとブローカーを使用することはできません。これがAMQPが役に立つところです。

** 3 AMQP – アドバンストメッセージキュープロトコル____


__

**

AMQPは、非同期メッセージングベースの通信用のオープンスタンダードのワイヤ仕様です。メッセージの構成方法についての説明があります。送信データの1バイトごとに指定します。


3.1. AMQPとJMS

の違い

AMQPはプラットフォームに依存しないバイナリプロトコル規格なので、この特性により、ライブラリをさまざまなプログラミング言語で作成し、さまざまなオペレーティングシステムやCPUアーキテクチャで実行することができます。

あるJMSブローカから別のJMSブローカに移行する場合のように、ベンダベースのプロトコルロックインはありません。詳細については、https://www.linkedin.com/pulse/jms-vs-amqp-eran-shaham[JMS vs AMQP]およびhttps://spring.io/understanding/AMQP[Understanding AMQP]を参照してください。広く使用されているAMQPブローカーのいくつかはRabbitMQ、OpenAMQ、StormMQです。

** 3.2. AMQPエンティティ


__

**

AMQPエンティティは、Exchange、Queues、およびBindingsで構成されています。

  • 交換は常に郵便局やメールボックスとクライアントのようなものです

AMQP取引所にメッセージを公開する
** キューはバインドキーを使用して交換にバインドされます。バインディングは「リンク」です

キューを取引所にバインドするように設定したこと
** メッセージはルーティングキーでメッセージブローカー/交換に送信されます。の

次にexchangeはメッセージのコピーをキューに配布します。 Exchangeは、ファンアウト、階層型ルーティングなど、さまざまなメッセージングルーティングを実現するための抽象化を提供します。


3.3. 交換タイプ

  1. 交換タイプには4つ組み込まれています.

    • 直接交換

    • ファンアウト交換

    • トピック交換

    • ヘッダ交換

詳細については、https://www.rabbitmq.com/tutorials/amqp-concepts.html[AMQPの概念]およびhttps://spring.io/blog/2011/04/01/routing-topologies-をご覧ください。 rabbitmqを使ったパフォーマンスとスケーラビリティ/[Routing Topologies]

** 4春のAMQP____


__

**

Spring AMQPは2つのモジュールから構成されています:spring-amqpとspring-rabbitです。それぞれ配布のjarファイルで表されます。春-

Spring-amqpは基本的な抽象概念であり、コアAMQPモデルを表すクラスがあります。それは

Exchange、Queue

、および

Binding.

です。

この記事では、春うさぎ固有の機能について説明します。

** 4.1. spring-amqpの機能____


__

**


  • テンプレートベースの抽象化

    – AMQPTemplateインターフェースはすべてを定義します


RabbitTemplate

を使用した、メッセージ送受信用の基本操作
実装として


発行元の確認/消費者の承認** サポート



  • 基本操作の実行を許可するツール

    AmqpAdmin




** 4.2. 春うさぎ


__

**

上記で説明したAMQPモデルと関連エンティティは一般的なものであり、すべての実装に適用できます。しかし、実装に特有の機能がいくつかあります。これらの春うさぎの機能のいくつかを以下に説明します。

  • 接続管理サポート** –

    org.springframework.amqp.rabbit.connection.ConnectionFactory

    インターフェースは、RabbitMQブローカーへの接続を管理するための中心的なコンポーネントです。

    ConnectionFactory

    インターフェースの

    CachingConnectionFactory

    実装の責任は、

    org.springframework.amqp.rabbit.connection.Connection

    インターフェースのインスタンスを提供することです。

spring-rabbitはRabbitMQクライアントの

com.rabbitmq.client.Connection

インターフェースのラッパーとして

Connection

インターフェースを提供しています。

  • 非同期メッセージ消費** – 非同期メッセージ消費のための2つの重要な概念はコールバックとコンテナです。コールバックはあなたのアプリケーションコードがメッセージングシステムと統合されるところです。

コールバックをコーディングする方法の1つは、

MessageListener

インターフェースの実装を提供することです。

public interface MessageListener {
    void onMessage(Message message);
}

アプリケーションコードとメッセージングAPIを明確に区別するために、Spring AMQPは

MessageListenerAdapter

も提供しています。リスナコンテナのSpring Bean設定例は次のとおりです。

MessageListenerAdapter listener = new MessageListenerAdapter(somePojo);
listener.setDefaultListenerMethod("myMethod");

Message-listenコールバックのさまざまなオプションを見たので、コンテナに注意を向けることができます。基本的に、リスナーコールバックが受動的なままでいることができるように、コンテナは「アクティブな」責任を取り扱います。コンテナはライフサイクルコンポーネントの一例です。起動と停止の方法を提供します。

コンテナーを構成するときは、基本的にAMQPキューと

MessageListener

インスタンスの間のギャップを埋めます。デフォルトでは、リスナコンテナはキューからメッセージを受信する単一のコンシューマを起動します。

** 5 Spring AMQP____を使用してメッセージを送受信する


__

**

Spring AMQPを介してメッセージを送受信する手順は次のとおりです。


  1. セットアップとRabbitMQブローカーの起動

    – RabbitMQのインストールとセットアップは

簡単です、ちょうど述べられたステップに従ってください

ここ



Javaプロジェクトの設定

– MavenベースのJavaプロジェクトを作成します。

上記の依存関係


メッセージプロデューサーの実装



RabbitTemplate

を使用してメッセージを送信できます。

“こんにちは、世界!”メッセージ:

AbstractApplicationContext ctx
  = new ClassPathXmlApplicationContext("beans.xml");
AmqpTemplate template = ctx.getBean(RabbitTemplate.class);
template.convertAndSend("Hello, world!");


  1. メッセージコンシューマの実装

    – 前述のように、実装することができます.

POJOとしてのメッセージコンシューマ

public class Consumer {
    public void listen(String foo) {
        System.out.println(foo);
    }
}


  1. Wiring Dependencies

    – 以下のスプリングビーンを使用する

キュー、交換、およびその他のエンティティーをセットアップするための構成。ほとんどのエントリは一目瞭然です。 “ myQueue”という名前のキューは、“ foo。** ”をバインディングキーとして使用してTopic Exchange“ myExchange”にバインドされます。


RabbitTemplate

は、デフォルトのルーティングキーとして「foo.bar」を使用して「myExchange」交換にメッセージを送信するように設定されています。

ListenerContainer

は、 “myQueue”キューから

Foo

クラスの__listen()メソッドへのメッセージの非同期配信を保証します。

<rabbit:connection-factory id="connectionFactory"
  host="localhost" username="guest" password="guest"/>

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
    exchange="myExchange" routing-key="foo.bar"/>

<rabbit:admin connection-factory="connectionFactory"/>

<rabbit:queue name="myQueue"/>

<rabbit:topic-exchange name="myExchange">
    <rabbit:bindings>
        <rabbit:binding queue="myQueue" pattern="foo.** "/>
    </rabbit:bindings>
</rabbit:topic-exchange>

<rabbit:listener-container connection-factory="connectionFactory">
    <rabbit:listener ref="consumer" method="listen" queue-names="myQueue"/>
</rabbit:listener-container>

<bean id="consumer" class="com.baeldung.springamqp.consumer.Consumer"/>

  • 注意** :デフォルトでは、ローカルのRabbitMQインスタンスに接続するために、ユーザー名 “guest”とパスワード “guest”を使用します。


    1. アプリケーションを実行します.

  • 最初のステップは、RabbitMQが動作していることを確認することです。


  • Producer.java

    を実行し、

    main()

    を実行してアプリケーションを実行します。

方法
** プロデューサーは、「foo.bar」を「myExchange」に送信します。

ルーティングキー
** 「myQueue」のバインディングキーに従って、メッセージを受け取ります


Listen()を使用した「myQueue」メッセージのコンシューマである**

Foo__クラス

コールバックがメッセージを受け取り、それをコンソールに表示するメソッド


6. 結論

この記事では、アプリケーション間の通信にSpring AMQPを使用したAMQPプロトコル上のメッセージングベースのアーキテクチャについて説明しました。

この記事の完全なソースコードとすべてのコードスニペットは、https://github.com/eugenp/tutorials/tree/master/spring-amqp[GitHubプロジェクト]から入手できます。