SpringBoot 2.0シリーズ--09--メッセージキュー(Rabbit)
28750 ワード
SpringBoot 2.0シリーズ–09–メッセージキュー(Rabbit)
文書ディレクトリ SpringBoot 2.0シリーズ--09-メッセージキュー(Rabbit) 前言 紹介 総フロー 具体的な操作 rabbitをインストールし、 を起動します.構成参照 pomファイル アプリケーション.propertiesファイル 単純(一対一のメッセージ)インスタンス キュー構成 を作成作成者 消費者 の作成試験類及び結果 一対のマルチメッセージ キュー構成 を作成作成者 消費者 の作成試験類、説明及び結果 マルチペアマルチメッセージ キュー構成 を作成作成者 消費者 の作成試験類、説明及び結果 送信対象 キュー構成 を作成オブジェクト 作成者 消費者 の作成試験類、説明及び結果 Topic Exchange キュー構成 を作成作成者 消費者 の作成試験類及び結果 Fanout Exchange キュー構成 を作成作成者 消費者 の作成試験類及び結果 参照リンク 連絡先 前言
JDKは11を出して、SpringBootは2.0を出して、まだ系統的な学習があったことがなくて、ちょうど最近プロジェクトの中で使うことがあって、いくつか肝心なものを列挙して、SpringBoot 2.0シリーズ–00–ディレクトリを忘れないようにします
紹介する
プロジェクトを分割する必要があり、分散する必要がある場合は一般的にメッセージキューを使用する必要があります.Rabbitはメッセージミドルウェアとして、実際のプロジェクトで使用される割合は大きいです.
メッセージミドルウェアの最も主要な役割はデカップリングであり、ミドルウェアの最も標準的な使い方は生産者がメッセージをキューに送信することであり、消費者はキューからメッセージを取り出して処理し、生産者は誰が消費するのかに関心を持たず、消費者は誰がメッセージを生産しているのかに関心を持たず、デカップリングの目的を達成する.
こちらは主にspringbootとRabbitMQを組み合わせて使用しています.詳しくはこちらをご覧ください.
//todo某リンク
総プロセス rabbitをインストールし、 を起動します.構成参照 単純(一対一のメッセージ)インスタンス 一対のマルチメッセージ マルチペアマルチメッセージ 送信対象 Topic Exchange Fanout Exchange
具体的な操作
rabbitのインストール、起動
表示可能
//todo某リンク
リファレンスの設定
pomファイル
アプリケーション.propertiesファイル
単純(一対一のメッセージ)インスタンス
キュー構成の作成
生産者の作成
消費者の作成
テストクラスおよび結果
こちらから1本出して、1本受け取りました
一対多のメッセージ
キュー構成の作成
生産者の作成
消費者の作成
テストクラス、説明および結果
1つの送信側、2つの受信側で、結果が平均的に分布していることがわかります.
複数対複数のメッセージ
キュー構成の作成
生産者の作成
消費者の作成
テストクラス、説明および結果
ここでは2対3の関係ですが、結果は平均的ではないように見えます.countを加えて、各受信者が実行した回数を統計します.最後に66.67.67であることがわかりました.だから平均的です.
オブジェクトの送信
キュー構成の作成
オブジェクト
生産者の作成
消費者の作成
テストクラス、説明および結果
エンティティにSerializableインタフェースを実装させると、直接送信できます.
Topic Exchange
キュー構成の作成
生産者の作成
消費者の作成
テストクラスおよび結果
Fanout Exchange
キュー構成の作成
生産者の作成
消費者の作成
テストクラスおよび結果
ここはブロードキャストなので、一度送信すると、3つのクライアントが受信できます.
リファレンスリンク
http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html
連絡先
プロジェクトコードパスコードクラウド:https://gitee.com/lizhaoandroid/Springboot-Learning-lz
連絡先:QQ 3060507060
次の記事またはその他の記事を表示するには、目次またはコラムをクリックして表示します.
文書ディレクトリ
JDKは11を出して、SpringBootは2.0を出して、まだ系統的な学習があったことがなくて、ちょうど最近プロジェクトの中で使うことがあって、いくつか肝心なものを列挙して、SpringBoot 2.0シリーズ–00–ディレクトリを忘れないようにします
紹介する
プロジェクトを分割する必要があり、分散する必要がある場合は一般的にメッセージキューを使用する必要があります.Rabbitはメッセージミドルウェアとして、実際のプロジェクトで使用される割合は大きいです.
メッセージミドルウェアの最も主要な役割はデカップリングであり、ミドルウェアの最も標準的な使い方は生産者がメッセージをキューに送信することであり、消費者はキューからメッセージを取り出して処理し、生産者は誰が消費するのかに関心を持たず、消費者は誰がメッセージを生産しているのかに関心を持たず、デカップリングの目的を達成する.
こちらは主にspringbootとRabbitMQを組み合わせて使用しています.詳しくはこちらをご覧ください.
//todo某リンク
総プロセス
具体的な操作
rabbitのインストール、起動
表示可能
//todo某リンク
リファレンスの設定
pomファイル
org.springframework.boot
spring-boot-starter-amqp
アプリケーション.propertiesファイル
#
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
単純(一対一のメッセージ)インスタンス
キュー構成の作成
@Configuration
public class RabbitConfig {
//
@Bean
public Queue helloQueue() {
return new Queue("hello");
}
@Bean
public Queue fooQueue() {
return new Queue("foo");
}
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: Sender
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: Receiver
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
テストクラスおよび結果
こちらから1本出して、1本受け取りました
//
@Test
public void easy() {
//
// Sender : hello Wed Nov 14 19:33:16 GMT+08:00 2018
// Receiver : hello Wed Nov 14 19:33:16 GMT+08:00 2018
sender.send();
// sender.sendFoo();
}
一対多のメッセージ
キュー構成の作成
//
@Bean
public Queue multimapQueue1() {
return new Queue("OneToMany");
}
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: one2ManySender
* Author: zhao
* Date: 2018/11/14 16:57
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: OneToManyReceiver1
* Author: zhao
* Date: 2018/11/14 16:59
* Description: 1
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: OneToManyReceiver2
* Author: zhao
* Date: 2018/11/14 16:59
* Description: 2
* History:
*
テストクラス、説明および結果
1つの送信側、2つの受信側で、結果が平均的に分布していることがわかります.
//
@Test
public void testOneToMany() throws Exception {
// ,2 ,
//
// OneToManySender : OneToMany Wed Nov 14 19:37:17 GMT+08:00 2018
//OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:17 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver1 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManySender : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
//OneToManyReceiver2 : OneToMany Wed Nov 14 19:37:18 GMT+08:00 2018
for (int i = 0; i < 100; i++) {
oneToManySender.send();
Thread.sleep(100);
}
}
複数対複数のメッセージ
キュー構成の作成
//
@Bean
public Queue multimapQueue3() {
return new Queue("manyToMany");
}
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: ManyToManySender
* Author: zhao
* Date: 2018/11/14 16:57
* Description:
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: ManyToManySender
* Author: zhao
* Date: 2018/11/14 16:57
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: ManyToManyReceiver1
* Author: zhao
* Date: 2018/11/14 16:59
* Description: 1
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: ManyToManyReceiver2
* Author: zhao
* Date: 2018/11/14 16:59
* Description: 2
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: ManyToManyReceiver3
* Author: zhao
* Date: 2018/11/14 16:59
* Description: 1
* History:
*
テストクラス、説明および結果
ここでは2対3の関係ですが、結果は平均的ではないように見えます.countを加えて、各受信者が実行した回数を統計します.最後に66.67.67であることがわかりました.だから平均的です.
//
@Test
public void testManyToMany() throws Exception {
// 2 3 , ,
// count, , 66.67.67,
//
//
// manyToManyReceiver1.count: 67
// manyToManyReceiver2.count: 66
// manyToManyReceiver3.count: 67
// ManyToManyReceiver3 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver1 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver2 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver3 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender1 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManySender2 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver1 : ManyToManySender2 Wed Nov 14 19:40:31 GMT+08:00 2018
// ManyToManyReceiver3 : ManyToManySender1 Wed Nov 14 19:40:31 GMT+08:00 2018
for (int i = 0; i < 100; i++) {
manyToManySender.send();
manyToManySender2.send();
Thread.sleep(100);
}
System.out.println(
"manyToManyReceiver1.count: " + manyToManyReceiver1.count + "
" + "manyToManyReceiver2.count: "
+ manyToManyReceiver2.count + "
" + "manyToManyReceiver3.count: " + manyToManyReceiver3.count
+ "
");
}
オブジェクトの送信
キュー構成の作成
//
@Bean
public Queue entityQueue() {
return new Queue("entity");
}
オブジェクト
/*
* Copyright (C), 2015-2018
* FileName: User
* Author: zhao
* Date: 2018/11/14 18:25
* Description: --
* History:
*
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: Sender
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: Receiver
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
テストクラス、説明および結果
エンティティにSerializableインタフェースを実装させると、直接送信できます.
//
@Test
public void entity() {
// Serializable ,
//
// Sender : User{id=1, name=' '}
// Receiver : User{id=1, name=' '}
entitySender.send();
}
Topic Exchange
キュー構成の作成
// topic
final static String message = "topic.message";
final static String messages = "topic.messages";
@Bean
public Queue queueMessage() {
return new Queue(RabbitConfig.message);
}
@Bean
public Queue queueMessages() {
return new Queue(RabbitConfig.messages);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("exchange");
}
@Bean
Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
}
@Bean
Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
}
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: Sender
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: Receiver
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: Receiver
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
テストクラスおよび結果
// topic -- key
@Test
public void topic() {
// queueMessages , 2 key ,
// topic.messages
// 2 topic.messages
//
// Sender : hi, i am message 1
// Sender : hi, i am messages 2
// TopicReceiver2 : hi, i am message 1
// TopicReceiver1 : hi, i am message 1
// TopicReceiver2 : hi, i am messages 2
topicSender.send1();
topicSender.send2();
}
Fanout Exchange
キュー構成の作成
// fanout
@Bean
public Queue AMessage() {
return new Queue("fanout.A");
}
@Bean
public Queue BMessage() {
return new Queue("fanout.B");
}
@Bean
public Queue CMessage() {
return new Queue("fanout.C");
}
@Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
}
@Bean
Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {
return BindingBuilder.bind(AMessage).to(fanoutExchange);
}
@Bean
Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(BMessage).to(fanoutExchange);
}
@Bean
Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(CMessage).to(fanoutExchange);
}
生産者の作成
/*
* Copyright (C), 2015-2018
* FileName: Sender
* Author: zhao
* Date: 2018/11/14 15:28
* Description:
* History:
*
消費者の作成
/*
* Copyright (C), 2015-2018
* FileName: FanoutReceiver
* Author: zhao
* Date: 2018/11/14 18:58
* Description: fanout
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: FanoutReceiver
* Author: zhao
* Date: 2018/11/14 18:58
* Description: fanout
* History:
*
/*
* Copyright (C), 2015-2018
* FileName: FanoutReceiver
* Author: zhao
* Date: 2018/11/14 18:58
* Description: fanout
* History:
*
テストクラスおよび結果
ここはブロードキャストなので、一度送信すると、3つのクライアントが受信できます.
// fanout --
@Test
public void fanout() {
// , ,
//
// Sender : hi, fanout msg
// FanoutReceiverB : hi, fanout msg
// FanoutReceiverC : hi, fanout msg
// FanoutReceiverA : hi, fanout msg
fanoutSender.send1();
}
リファレンスリンク
http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html
連絡先
プロジェクトコードパスコードクラウド:https://gitee.com/lizhaoandroid/Springboot-Learning-lz
連絡先:QQ 3060507060
次の記事またはその他の記事を表示するには、目次またはコラムをクリックして表示します.