最後の章では、RabbitMQのインストールについて話しました
この章では、RabbitMQの使用を説明します
まず、スタートのRabbitMQ
RabbitMQのサーバ- デタッチ
私は春直接使用する新しいJava springbootプロジェクトのinit
最初のステップ:
導入ポンポン依存ファイル
<依存> <groupIdを> com.rabbitmq </ groupIdを> <たartifactId> AMQPクライアント</たartifactId> <バージョン> 5.8.0 </バージョン> </依存関係>
ステップ2:消費者と生産終了を作成します。
消費者側:
public class Consumer0 {
/**
* 创建交换机
*
* 创建队列
*
* 将队列与交换机绑定
*
* 定义自己的消费方法
*
*进行监听
* @param args
* @throws IOException
* @throws TimeoutException
*/
public static void main(String[] args) throws IOException, TimeoutException {
//队列的名字
String queueName = "stu01queue";
//交换机的名字
String exchangeName = "stu01exchange";
//1:创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setPort(5672);
connectionFactory.setHost("192.168.106.70");
connectionFactory.setVirtualHost("/");
Connection connection = connectionFactory.newConnection();
//2:获取channel
Channel channel = connection.createChannel();
/**
* 3:定义exchange
* 参数分别为:
* exchange名字
* exchange类型
* 是否持久化
* 自动删除?
* 自定义参数
*/
channel.exchangeDeclare(exchangeName, "topic", true, true, null);
/**
* 4:
* 定义queue
*
* 参数分别为
* 名字
* 是否持久化
* 是否顺序消费 只有我自己可以消费
* 是否自动删除
* 参数 拓展参数
*/
channel.queueDeclare(queueName, true, false, false, null);
/**
* 5:
* 将队列绑定到exchange
*/
channel.queueBind(queueName, exchangeName, "stu0");
//6:进行消费
channel.basicConsume(queueName,true,new MyConsumer0(channel));
}
}
生産面:
public class Produce0 {
public static String exchangeName = "stu01exchange";
/**
* 将消息发送到对应的交换机
*
* 发送的时候指定routingkey
*
* 这样 当消费者监听的队列绑定的是这个routingkey 就可以接受到消息
*
*
* @param args
* @throws IOException
* @throws TimeoutException
*/
public static void main(String[] args) throws IOException, TimeoutException {
//工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.106.70");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
//链接
Connection connection = connectionFactory.newConnection();
//获取channel
Channel channel = connection.createChannel();
//创建要发送的数据
String[] strs = {"迪丽热巴", "古力娜扎"};
//将数组数据循环发送
Arrays.stream(strs).forEach(e -> {
try {
channel.basicPublish(exchangeName, "stu0", null, e.getBytes());
} catch (IOException ex) {
ex.printStackTrace();
}
});
String sendMsg = "Hello Rabbit";
channel.basicPublish(exchangeName, "stu0", null, sendMsg.getBytes());
channel.close();
connection.close();
}
}
カスタムメッセージの受信方法:
public class MyConsumer0 extends DefaultConsumer {
/**
* Constructs a new instance and records its association to the passed-in channel.
*
* @param channel the channel to which this consumer is attached
*/
public MyConsumer0(Channel channel) {
super(channel);
}
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("-----------consume message----------");
System.out.println("consumerTag: " + consumerTag);
System.out.println("envelope: " + envelope);
System.out.println("properties: " + properties);
System.out.println("body: " + new String(body));
}
}
デモの種類を完了するために、このようなシンプルなトピック
[スタート]消費者 - >スタートアッププロデューサー
コンソールに成功している見ることができます
ここでは上記のコードではいくつかの値を説明します。
耐久性:永続データを保存するかどうかであるかどうか
自動削除:自動的に削除するかどうか、キューが削除されてバインドされた後、現在の為替た場合に自動的に削除?
引数:カスタムパラメータを送信します
交換の方法がありますトピックです
実際には、直接およびファンアウトがあります
モード、トピック、および結合操作コード
routingKeyトピックの結合は、結合のような、曖昧であることができます
試験#平均試験。(*)(*)が複数の値にルーティングされます
テスト。*代表的なテスト。(*)が値にルーティングされます
モードがダイレクトモードである場合にのみroutingKeyただ直接の対応をルーティングすることができています
モードはファンアウトブロードキャストモードに似ている場合は、すべてのリスナーは、Exchangeにルーティングされます
実際には、上記のステップから見て難しいことではありませんが、三段階であります
1:交換を定義します
2に定義されたキュー
3キューと交換バインド
コードは実際のキュー・モニター・消費者側であります
Routingkey生産と送信データに端末交換及び伝送の指定時間
例えばroutingkeyて送信はtestRoutingKeyです
リスナーの消費者側に結合キューと交流関係があることを起こるときroutingkeyがルーティングされます
これらは、簡単な方法詳細な説明では私の自由意志のspringboot簡単なデモ続く使用されています