《RabbitMQ系列教程-第四章-01-RabbitMQ工作模式之Simple模式》
阿新 • • 發佈:2021-01-08
技術標籤:# 《RabbitMQ系列教程》佇列rabbitmqjava訊息佇列交換機
RabbitMQ工作模式之Simple模式
4.1.1 簡介
simple模式就是我們之前做的快速入門案例
簡單模式中表現為一個生產者對應一個消費者,生產者(Producer)生產訊息傳送到佇列,消費者(Consumer)監聽此佇列,進行訊息的消費;
Simple模式官網介紹:https://www.rabbitmq.com/tutorials/tutorial-one-java.html
4.1.2 生產者
package com.lscl.rabbitmq;
import com.rabbitmq. client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer01_Hello {
public static void main(String[] args) throws Exception{
// 1. 建立連線工廠
ConnectionFactory factory = new ConnectionFactory();
// 2. 設定連線引數
factory. setHost("192.168.133.147");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
// 3. 獲取連線物件
Connection connection = factory.newConnection();
// 4. 通過connection獲取Channel
Channel channel = connection.createChannel();
// 5. 定義一個交換機
/*
引數1(queue): 佇列名稱
引數2(durable): 是否要持久化佇列(mq重啟之後還在)
引數3(exclusive): 是否是獨佔佇列(只能有一個消費者監聽此佇列,沒有也不行)
引數4(autoDelete): 是否自動刪除(當沒有Consumer時,佇列自動刪除)
引數5(arguments): 佇列的其他引數(過期時間、最大訊息容量等)
*/
channel.queueDeclare("hello_world",true,false,false,null);
String body="hello world";
// 6.傳送訊息
/*
引數1(exchange): 交換機的名稱,簡單模式下交換機會使用預設的交換機""
引數2(routingKey): routingKey,路由名稱,在簡單模式下,routingKey就是佇列名稱
引數3(props): 訊息的一些配置資訊
引數4(body): 傳送的訊息(位元組)
*/
channel.basicPublish("","hello_world",null,body.getBytes());
// 7. 釋放資源
channel.close();
connection.close();
}
}
4.1.3 消費者
package com.lscl.rabbitmq;
import com.rabbitmq.client.*;
import java.io.IOException;
public class Consumer01_Hello {
public static void main(String[] args) throws Exception{
// 建立連線工廠,用於獲取頻道channel
ConnectionFactory factory = new ConnectionFactory();
// 設定連線引數
factory.setHost("192.168.40.132");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
// 2.建立連線
Connection connection = factory.newConnection();
// 3.建立頻道
Channel channel = connection.createChannel();
// 4.建立佇列
/*
定義佇列,如果沒有此佇列則建立,如果有則不建立
queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
queue: 佇列的名稱
durable: 是否持久化佇列(mq重啟之後還在)
exclusive: 是否獨佔(只能有一個消費者監聽此佇列)
autoDelete: 是否自動刪除(當沒有Consumer時,自動刪除掉)
arguments: 其他引數
*/
channel.queueDeclare("hello_world", true, false, false, null);
// 5. 接收訊息
/*
basicConsume(String queue, boolean autoAck, Consumer callback)
queue: 佇列名稱
autoAck: 是否開啟自動確認
callback: 回撥物件
*/
channel.basicConsume("hello_world", true, new DefaultConsumer(channel) {
// 回撥方法,當收到訊息之後,會自動執行該方法
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
/*
1. consumerTag:標識
2. envelope:獲取一些資訊,交換機,路由key...
3. properties:配置資訊
4. body:資料
*/
System.out.println("consumerTag:" + consumerTag);
System.out.println("Exchange:" + envelope.getExchange());
System.out.println("RoutingKey:" + envelope.getRoutingKey());
System.out.println("properties:" + properties);
System.out.println("body:" + new String(body));
}
});
// 不釋放資源,讓rabbitmq一直監聽
}
}
4.1.4 小結
在Simple交換模式中,一個生產者對應一個消費者,不能對應多個消費者(有多個消費者就不是Simple模式了),生產者傳送訊息給預設的交換機(空字串""
),訊息由預設的交換機(空字串)路由到佇列,消費者監聽佇列進行訊息的消費;
下一篇:《RabbitMQ系列教程-第四章-02-RabbitMQ工作模式之Work模式》