ActiveMQ ノート 第 2 章 JMS ベースのメッセージング

第 2 章 JMS ベースのメッセージング

2-1 JavaメッセージキューJMSの全体設計構造

パワー ノード ActiveMQ ビデオ チュートリアルのフルセット - ActiveMQ メッセージ ミドルウェアを学ぶのに 7 時間

基本要素

  1. プロデューサー プロデューサー
  2. 消費者 消費者
  3. メッセージサービスブローカーの対話モデル

2-2 JMS の 2 つのメッセージング モード

  1. ポイントツーポイント (ポイントツーポイント): メッセージを送信するためのキュー Queue の使用専用。
  2. パブリッシュ/サブスクライブ (Publish/Subscribe): トピック Topic を使用してメッセージを送信するために特に使用されます。

キューベースのポイントツーポイント メッセージは、1 つのコンシューマによってのみ使用できます。たとえば、複数のコンシューマが同じメッセージ キューに登録されます。プロデューサがメッセージを送信すると、すべてのコンシューマではなく、そのうちの 1 つのコンシューマだけがメッセージを受信します。メッセージを受信できます。
トピックベースのパブリッシュおよびサブスクライブメッセージは複数のコンシューマーによって消費され、トピックをサブスクライブするすべてのコンシューマーはプロデューサによって送信されたメッセージを受信できます。

2-3 JavaメッセージキューJMS APIの概要

JMS API の概要
JMS API は、次の 3 つの主要な部分に分割できます。

  1. パブリック API: キューまたはトピックとの間でメッセージを送受信するために使用できます。
  2. ポイントツーポイント API: キューを使用したメッセージ送信専用。
  3. パブリッシュ/サブスクライブ API: トピック Topic を使用したメッセージ配信専用。

JMS パブリック API は
JMS パブリック API 内にあり、メッセージの送受信に関連する JMS API インターフェイスは主に次のとおりです。

  • コネクションファクトリー
  • 繋がり
  • セッション
  • メッセージ
  • 行き先
  • メッセージプロデューサー
  • メッセージ消費者

それらの関係は次のとおりです。ConnectionFactory を取得したら Connection を作成でき、Connection を取得したら Session を作成でき、Session を取得したら Message、MessageProducer、および MessageConsumer を作成できます。
JMS ポイントツーポイント API
ポイントツーポイント (p2p) メッセージング モデル API は、JMS API 内のキューベースのインターフェイスを指します。

  • キュー接続ファクトリー
  • キュー接続
  • キューセッション
  • メッセージ
  • キュー送信者
  • キューレシーバー

インターフェイスの名前からわかるように、ほとんどのインターフェイス名は、パブリック API インターフェイス名の前に Queue という単語を追加しているだけです。一般に、ポイントツーポイント メッセージング モデルを使用するアプリケーションは、パブリック API ではなくキューベースの API を使用します。
JMS パブリッシュ/サブスクライブ API
パブリッシュ/サブスクライブ メッセージング モデル API は、JMS API 内のトピックベース (トピック) インターフェイスを指します。

  • トピック接続工場
  • トピック接続
  • トピックセッション
  • メッセージ
  • トピック
  • トピック出版社
  • トピック購読者

トピックベースの JMS API はキューベースの API に似ているため、ほとんどの場合、キューという単語はトピックに置き換えられます。

2-4 ActiveMQ ポイントツーポイント送信例


1. jms と activemq の関連 jar パッケージを追加します。

<!-- JMS规范的jar依赖 -- >
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
</dependency>

<!-- activeMQ对jms具体实现的jar依赖 -- >
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.15.2</version>
</dependency>

2. サンプル コードを参照して、コンシューマー送信側とメッセージ受信側を作成します。
3. 送信側と受信側のコードを実行し、activeMQ Web コンソールでメッセージ データを観察します。

2-5 ActiveMQ のパブリッシュとサブスクライブの例

1. jms と activemq の関連 jar パッケージを追加します
。 2. サンプル コードを参照して、コンシューマ パブリッシャーとメッセージ サブスクライバーを作成します
。 3. パブリッシャーとサブスクライバーのコードを実行し、activeMQ Web コンソールでメッセージ データを観察します。 注: messageサブスクリプション 最初にパブリッシャーを実行し、次にメッセージ パブリッシャーを実行する必要があります。

2-6 キューとトピックの比較


プル モードとプッシュ モード
ポイントツーポイント メッセージの場合、キューをリッスンしているコンシューマが存在しない場合、メッセージはメッセージ コンシューマがキューに接続するまでキュー内に残ります。このモデルでは、メッセージはメッセージ コンシューマに自動的にプッシュされませんが、メッセージ コンシューマによってキューから要求されます (プル モード)。
パブリッシュ/サブスクライブ メッセージング モデルは、基本的にはプッシュ モデルです。このモデルでは、メッセージは自動的にブロードキャストされるため、メッセージの利用者は新しいメッセージのトピックを積極的にリクエストしたりポーリングしたりする必要がありません。

2-7 ActiveMQ メッセージの種類

  1. **TextMessage テキスト メッセージ:** 有効なデータ (ペイロード) として java.lang.String を運ぶメッセージ。文字列型の情報交換に使用できます。
  2. **ObjectMessage オブジェクト メッセージ:** シリアル化可能な Java オブジェクトをペイロードとして運ぶメッセージ。Java オブジェクト タイプの情報交換に使用できます。
  3. **MapMessage マッピング メッセージ:** 一連のキーと値のペアをペイロードとして運ぶメッセージ。有効なデータ値は Java プリミティブ データ型 (またはそのラッパー クラス) および文字列である必要があります。つまり、byte、short、int、long、float、double、char、boolean、String
  4. **BytesMessage バイト メッセージ: **プリミティブ データ型の一連のバイト ストリームをペイロードとして運ぶメッセージ。
  5. **StreamMessage ストリーム メッセージ: **ペイロードとしてプリミティブ データ型のストリームを運ぶメッセージで、ストリームに書き込まれるときにデータ型が維持されます。どのような型が書き込まれても、読み取りも同じ型である必要があります。

2-8 ActiveMQ トランザクション メッセージと非トランザクション メッセージ

メッセージはトランザクション メッセージと非トランザクション メッセージに分けられます。 **トランザクション メッセージ: **transacted=true connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE)
を使用してセッション Session を作成します。 **非トランザクション メッセージ: **作成セッション Session using transacted =false connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);トランザクション メッセージは、メッセージの送受信後に明示的に session.commit() を呼び出す必要があります。





2-9 ActiveMQメッセージ確認の仕組み

メッセージが確認された後でのみ、メッセージは正常に消費されたとみなされ、キューまたはトピックから削除されます。
メッセージが正常に消費されるには、通常、
(1) クライアントがメッセージを受信する、
(2) クライアントがメッセージを処理する、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが処理される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが処理される、(3) メッセージが確認される、(5) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、(3) メッセージが確認される、
(3) メッセージが確認される、(3) メッセージが確認される、および

  1. Session.AUTO_ACKNOWLEDGE; クライアント (コンシューマ) が受信メソッドから正常に戻るか、MessageListener.onMessage メソッドから正常に戻ると、セッションは自動的にメッセージを確認します。
  2. Session.CLIENT_ACKNOWLEDGE; クライアントは、メッセージの確認応答メソッドを明示的に呼び出すことによって、メッセージを確認応答します。
  3. Session.DUPS_OK_ACKNOWLEDGE; 確認する必要はありません。これは「遅延」メッセージ確認であり、メッセージは繰り返し送信される可能性があります。メッセージが 2 回目に再送信されると、メッセージ ヘッダーの JMSRedelivered が true に設定されます。現在のメッセージが一度送信されたことを示します。クライアントはメッセージの繰り返し処理を制御する必要があります。
  4. Session.SESSION_TRANSACTED; トランザクションはコミットされ、確認されました。トランザクションメッセージの場合は、どのメッセージ確認モードが設定されていても、自動的に確認されます。

2-10 ActiveMQ 永続メッセージと非永続メッセージ

//设置发送的消息是否需要持久化 
//不持久化                                  
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 
//持久化的,当然 activemq 发送消息默认都是持久化的
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);

2-11 ActiveMQ メッセージのフィルタリング

ActiveMQ は、メッセージ セレクターの基準に従ってメッセージ フィルターを実行し、フィルター基準を満たすメッセージのみを受信するメカニズムを提供します。プロデューサーはメッセージに一意のフラグを設定でき、コンシューマーはこれらの受信メッセージに基づいて特定のフラグを使用します。1.
送信特別なフラグを持つメッセージ:
message.setStringProperty(name, value);
2. 特別なフラグに基づくメッセージ セレクターを使用してメッセージを受信する:
MessageConsumer createConsumer(Destination destination, String messageSelector);
注: メッセージ セレクターは文字列であり、構文は次のとおりです。データベースの SQL に似ており、SQL ステートメントの where 条件の背後にある内容に相当します。

2-12 ActiveMQメッセージ受信方法

同期受信の
receive()メソッドを同期受信といいます;同期受信は非同期受信を
1スレッドで受信するのと同じですリスナーのMessageListenerを使ってメッセージを受信しますこのような受信を非同期受信といいます注意:同じコンシューマ内では、これら 2 つのスタイル、たとえば、リスナーを使用する場合、receive() メソッドが呼び出されたときに Exception がスローされます。



おすすめ

転載: blog.csdn.net/f5465245/article/details/130724772