二我々の簡潔RabbitMQのメッセージングモードのいくつかをご紹介:
図1に示すように、ダイレクトモード(ダイレクト)
(1)ダイレクトモードの紹介
私たちは、最も単純な形式であるとき、一つのノードのみ、このモードを使用するようにメッセージを送信する必要があります。
任意のメッセージを送信するための直接交換は、キューを指定RouteKeyに転送されます。
1.一般的な使用のRabbitMQは、Exchangeが来る:「」(名前は空の文字列所で、以下、デフォルトのExchangeと呼びます)。
2.交換は、任意のモードそのようなバインディング(結合)操作で行われる必要はありません。
「RouteKey」3.メッセージングが必要です、それは単に送信するキューの名前として理解することができます。
キュー名が指定されたバーチャルホストRouteKey存在しない場合は4は、そのメッセージは破棄されます。
(2)キューを作成
次の例を実行する前に、まずitcastというキューを作成します。
耐久性:耐久性(長期的な)過渡(一時的な)永続行われた場合
、自動削除:自動的に削除するかどうか
(3)生産コード、その実装メッセージ---
まず、次のように始まっ依存AMQP導入プロジェクトrabbitmq_demo、のpom.xmlを作成します。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第二に、コンフィギュレーション・ファイルapplication.ymlを書きます
spring:
rabbitmq:
host: 192.168.184.134
第三には、クラスを書き始めます
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
第四に、書き込みテストクラス
@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class)
public class MqTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSend(){
rabbitTemplate.convertAndSend("test","测试");
}
}
メッセージを実装(4)消費者コード---
まず、メッセージコンシューマクラスを記述
@Component
@RabbitListener(queues="test" )
public class Customer1 {
@RabbitHandler
public void showMessage(String message){
System.out.println("itcast接收到消息:"+message);
}
}
第二に、起動クラスを実行して、あなただけのコンソールにメッセージが送信され見ることができます
2、破壊モード(ファンアウト)
(1)はじめに破壊モード
我々は複数のキューに送信されたメッセージを必要とするとき、私たちは、このモードを使用する必要があります。図は次のとおりです。
ファンアウトExchangeに送信されたメッセージは、のすべてのExchangeバインディング(バインディング)に転送されます
キュー。
1.パターンは、ルーティングテーブルとして理解することができる
。このモードはRouteKey必要としない2.
3.このモードでは、事前交換キューを必要とバインドは、Exchangeキューを複数結合することができ、キューは、Exchangeの複数接続することができセット。
受信したメッセージとExchangeが任意のキューを結合しない場合4.、そのメッセージは破棄されます。
(2)結合キュー交換
まず、キューおよびキューitheima kudingyuを追加
第二に、新しいスイッチchuanz(クリアしてから、前のセクションを確認)
第三に、itcastと交換chuanzhiにバインドitheima 2つのキュー
スイッチ管理インターフェイスにchuanzhiをクリックしてください
バインディングとバインディングの追加itheima kudingyuをクリックしてください
次のような効果を結合した後です。
(2)コード、その実装メッセージプロデューサ---
@Test
public void testSendFanout(){
rabbitTemplate.convertAndSend("chuanzhi","", "分列模式test");
}
メッセージを実装(3)消費者コード---
まず、itheimaニュースを監視するためのメッセージ・リスナー・クラスを作成します
@Component
@RabbitListener(queues="itheima" )
public class Customer2 {
@RabbitHandler
public void showMessage(String message){
System.out.println("itheima接收到消息:"+message);
}
}
第二に、kudingyuのニュースを監視するためのメッセージ・リスナー・クラスを作成します
@Component
@RabbitListener(queues="kudingyu" )
public class Customer3 {
@RabbitHandler
public void showMessage(String message){
System.out.println("kudingyu接收到消息:"+message);
}
}
(4)試験は、2件のメッセージがコンソールに見ることができます
3、テーマ(トピック)
(1)テーマの紹介
トピックExchangeに送信されたメッセージは、キューのトピックを指定されたすべての関係RouteKeyに転送されます。
上記のように
米国の#、#代表赤routekeyの欄に示す:異なるソースからのメッセージ・スイッチは、例えば、ファジーマッチングの意味を理解するために優れていること、実際には、カラムに到着できるように任意の文字に一致しますが、この列に到達するメッセージのために、米国。#は良いの背中が自由であると一致しなければなりません。図usa.news
usa.weatherは、赤キューで見つけることができ、#記号は、1つ以上の単語に一致し、記号*は劣らず、より多くの単語と一致しません。したがって、USA。#usa.news.XXXに合わせることができますが、米国は。* usa.XXXにのみ一致します。
注:
最終的な分析は、名前のリストで切り替えて、キューがバインドされています。メッセージがスイッチに掲載されている場合、実際には、メッセージは、スイッチ上のバインディングの同じリストに接続されている最後のチャンネルからのメッセージをルーティング、比較キーにルーティングされます。トピックExchangeに送信されたメッセージは、すべてのRouteKey指定された関係のトピックのキューに転送されます
1.このモデルは、簡単な言葉で、より複雑である各キューは、「タイトル」(RouteKey)と、すべてのメッセージが提示されている懸念し、独自のテーマを持っていることである、ExchangeはぼかしとRouteKeyことができ、すべての関係のトピックにメッセージを転送しますマッチングキュー。
2.このモデルは、おそらく取引所キューの前進をバインドするために、RouteKeyが必要です。
3.例えば、「#.logという。#」として、結合作りキューへの関心の話題を提供するために、「MQ.log.error」のメッセージとして(RouteKeyログに関わるすべてのメッセージのキューのケアが転送されることを示しますキューに)。
4.「#」は「」、0またはいくつかのキーワードを表しキーワードを示します。「ログ」として『log.warn.timeout』と一致しないことができ、 『log.warn』と一致させることができます;「ログ#は、」しかし、両方と一致させることができます。
ExchangeがRouteKeyキューと一致することが可能であることが見出されていない場合5.同様に、このメッセージは破棄されます。
(2)バインディングを持つキューを作成
まず、新しいスイッチは、トピックの種類を選択します
第二に、新しいスイッチtopictestをクリックしてください
マッチングルールを追加し、リストを追加、次のとおりです。
(2)コードの実装
まず、テストクラス・メソッドの準備:
@Test
public void testSendTopic1(){
rabbitTemplate.convertAndSend("topictest","goods.aaa","主题模式");
}
第二に、出力:テーマ:itcastは、メッセージを受信しました
@Test
public void testSendTopic2(){
rabbitTemplate.convertAndSend("topictest","article.content.log","主题模式");
}
第三に、出力:テーマ:itheimaは、メッセージを受信しました
@Test
public void testSendTopic3(){
rabbitTemplate.convertAndSend("topictest","goods.log","主题模式");
}
第四に、出力:
itheima接收到消息:主题模式
itcast接收到消息:主题模式
kudingyu接收到消息:主题模式
この時点で、RabbitMQのメッセージングモデルは3完全な導入、女性と子供の靴ハンズダウン操作を持っています。