メッセージングミドルウェア--RabbitMQ(5)クイックスタート生産者と消費者、SpringBootはRabbitMQの統合します!

注意を探しています

クイックスタート生産者と消費者、RabbitMQの統合SpringBoot!

序文

この章では、クイックスタートRabbitMQ--生産者と消費者に来ます。私たちは、生産側と消費側のモデルを構築する必要があります。それは何を意味するのでしょうか?私たちのプロデューサーはRabbitMQのクラスタブローカーに配信されたメッセージを送信します。私たち消費者側が、メッセージがキューにあり、それが消費することが分かったときに、RabbitMQのを待ち受けます。

1.環境の準備

この統合により、主SpringBootフレームワークは、SpringBootの使用をある程度理解している必要があります。

2.おそらく手順

私たちは、おそらく以下のステップを見てみましょう。

  • ConnectionFacorty:接続ファクトリ
  • 接続:接続
  • チャンネル:データ通信チャネルメッセージを送受信することができます
  • キュー:特定のメッセージストレージをキュー
  • プロデューサー&消費生産者と消費者

などのRabbitMQノードアドレス、ポート番号、VirtualHostのこの接続ファクトリは、次のような、適切な情報を設定する必要があります。チャンネルは、私たちのRabbitMQのメッセージすべての相互作用に重要です。

3.プロジェクトの戦闘

3.1接続ファクトリ


/**
 * 
* @ClassName: ConnectionUtils 
* @Description: 连接工具类
* @author Coder编程
* @date 2019年6月21日 上午22:28:22 
*
 */
public class ConnectionUtils {
    public static Connection getConnection() throws IOException, TimeoutException {
        //定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务地址
        factory.setHost("127.0.0.1");
        //端口
        factory.setPort(5672);//amqp协议 端口 类似与mysql的3306
        //设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("/vhost_cp");
        factory.setUsername("user_cp");
        factory.setPassword("123456");
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }
}

复制代码

3.2生産終了


/**
 * 
* @ClassName: Producer 
* @Description: 生产者
* @author Coder编程
* @date 2019年7月30日 上午21:04:43 
*
 */
public class Producer {

	
	public static void main(String[] args) throws Exception {
	
		System.out.println("Producer start...");
		
		//1 创建ConnectionFactory
		Connection connection = ConnectionUtils.getConnection();
		
		//2 通过connection创建一个Channel
		Channel channel = connection.createChannel();
		
		//3 通过Channel发送数据
		for(int i=0; i < 5; i++){
			String msg = "Hello RabbitMQ!";
			//1 exchange   2 routingKey 
			channel.basicPublish("", "test001", null, msg.getBytes());
		}

		//4 记得要关闭相关的连接
		channel.close();
		connection.close();
	}
}



复制代码

3.3消費者エンド


/**
 * 
* @ClassName: Consumer 
* @Description: 消费端
* @author Coder编程
* @date 2019年7月30日 上午21:08:12 
*
 */
public class Consumer {

	public static void main(String[] args) throws Exception {
		
		System.out.println("Consumer start...");
		
		//1 创建ConnectionFactory
		Connection connection = ConnectionUtils.getConnection();
		
		//2通过connection创建一个Channel
		Channel channel = connection.createChannel();
		
		//3声明(创建)一个队列
		String queueName = "test001";
		channel.queueDeclare(queueName, true, false, false, null);
		
		//4创建消费者
		QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
		
		//5设置Channel
		channel.basicConsume(queueName, true, queueingConsumer);
		
		while(true){
			//6 获取消息
			Delivery delivery = queueingConsumer.nextDelivery();
			String msg = new String(delivery.getBody());
			System.err.println("消费端: " + msg);
			//Envelope envelope = delivery.getEnvelope();
		}
		
	}
}




复制代码

3.4ソースコード解析


channel.queueDeclare(queueName, true, false, false, null);

复制代码

基礎となるコード

第一引数:QUEUENAME:第二引数のキューの名前:耐久性のある永続的な場合。排他的::真のメッセージがローカルに永続化された後、メッセージは第三引数を失っていないことを確認するためにサービスを再起動し、消費のために:独占表現を、のような、特定の状況では、真の必要に設定されています。聞くために行くことができる唯一のチャンネルがあり、他のチャンネルを聞くことはできません。目的は、消費者の順序を保証することです。第四パラメータ:自動削除:Exchangeが結合されていない場合は、5番目のパラメータを自動的にキューに削除されます。引数:拡張パラメータ


channel.basicConsume(QUEUE_NAME, true, consumer);

复制代码

二番目のパラメータAUTOACK:自動的にメッセージに署名

3.5プログラムを実行します

(1)消費者側を起動

消費者側を開始

(2)表コントロールを見ます

概要
あなたは、消費者の接続、チャネル、およびその他の情報があることがわかります。

接続
チャンネル
あなたは、チャネルの現在のステータスが確認できる アイドル 状態。

キュー
もっとtest001キューキュー。

この制御デスクについてこの記事を見ることができます:

(3)生産実行終了

生産面を実行します
消費者の終了メッセージが受信されます
メッセージを送信した後、終了後に生産を停止し、消費者側はすぐにメッセージが表示さ見ることができます。あなたは、消費者によって観察された状況局を制御し続けることができます。

(4)の問題

注意:

質問があるかもしれません:なぜあなたはそれが終わる過ごし始めたのですか?

キューが作成されるため、最終的に消費者は、私たちはメッセージを送ることができるようにキューを持っている必要があります。

もう一つの問題:生産側のコードでは:


channel.basicPublish("", "test001", null, msg.getBytes());

复制代码

それだけで、キューの名前、消費者側が、それでもなぜあるメッセージを消費することができるように設定交換を、設定しないのですか?

:メッセージは、Exchangeを指定する必要があります、またはあなたが取引所取引所が空で指定しない場合、それは最初に行くためにデフォルト設定されます

デフォルトの交換
そのルーティングルール:ルートは過去にない場合は、同じ名前のキューのキューのメッセージは、過去にルーティングは、メッセージを削除することになります。

文末

個人的なマイクロチャネル公衆番号へようこそ注意:Coderのプログラムの最新オリジナルな技術に関する記事と無料の学習教材のため、多くのブティックマインドマップ、インタビューデータ、PMPの準備資料あなたがリードするために、待っているあなたは、いつでも、どこでも技術的な知識を習得することができます!QQのグループを作成します:315 211 365を、私たちは一緒にグループ交換研究に歓迎します。ありがとうございます!また、必要としている友人の側に導入することができます。

記事のGithubに含ま:github.com/CoderMerlin ... Gitee:gitee.com/573059382/c ...歓迎の注意と星〜

マイクロチャンネル公衆数

参考記事:

www.cnblogs.com/myJavaEE/p/...

「簡潔RabbitMQのメッセージング・ミドルウェア」

推奨読書:

導入されたメッセージングミドルウェア--RabbitMQ(2)主要な主流のメッセージングミドルウェア包括的な比較!

メッセージングミドルウェア--RabbitMQ(c)の中核となる概念とRabbitMQのAMQPプロトコルを理解します!

メッセージミドルウェア--RabbitMQ(4)コマンドライン制御局の基本的な操作!

おすすめ

転載: juejin.im/post/5d441f81518825246a151c2c