Web 管理頁面
通過程式碼 debug 來對 Web 管理頁面有個更直觀的認識
生產者程式碼如下
public class Producer {
public static void main(String[] args) {
// 所有的中介軟體技術都是基於 TCP/IP 協議基礎之上構建的協議規範,只不過 rabbitmq 遵循的是 AMQP 協議
// ip port
// 1 建立連線工廠
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.33.180");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("szy10086");
connectionFactory.setVirtualHost("/");
Connection connection = null;
Channel channel = null;
try {
// 2 建立連線 Connection
connection = connectionFactory.newConnection("生產者");
// 3 通過連線獲取通道 Channel
channel = connection.createChannel();
// 4 通過建立交換機,宣告佇列,繫結關係,路由 key,傳送訊息和接收訊息
String queueName = "queue1";
/*
* 佇列名字
* 是否具有持久化 durable=false 所謂持久化訊息是否存檔,如果是false 非持久化 true 持久化?非持久化會存檔麼,會存檔,但是會隨著伺服器的重啟丟失
* 排他性,是否具有獨立執行緒
* 是否自動刪除,隨著最後一個消費者訊息消費完畢之後,是否把佇列自動刪除
* 攜帶一些附屬引數
*/
channel.queueDeclare(queueName,false,false,false,null);
// 5 準備訊息內容
String message = "hello,world";
// 6 傳送訊息給佇列 queue
// 交換機,佇列、路由key,訊息是否持久化,訊息內容主體
channel.basicPublish("",queueName,null,message.getBytes());
System.out.println("傳送訊息成功");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally {
// 7 關閉通道
if (channel!= null && channel.isOpen()) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
// 8 關閉連線
if (connection != null && connection.isOpen()) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
當程式碼執行到建立連線 Connection 時,可以在 Connections 一欄看到連線資訊。
當程式碼執行到建立通道時,看到 Channels 一欄資訊
當程式碼執行到佇列時候,看到 queues 一欄的資訊
執行結束之後可以看到佇列中的訊息增加了一個
消費著程式碼如下
public class Consumer {
public static void main(String[] args) {
// 所有的中介軟體技術都是基於 TCP/IP 協議基礎之上構建的協議規範,只不過 rabbitmq 遵循的是 AMQP 協議
// ip port
// 1 建立連線工廠
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.33.180");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("szy10086");
connectionFactory.setVirtualHost("/");
Connection connection = null;
Channel channel = null;
try {
// 2 建立連線 Connection
connection = connectionFactory.newConnection("生產者");
// 3 通過連線獲取通道 Channel
channel = connection.createChannel();
// 4 通過建立交換機,宣告佇列,繫結關係,路由 key,傳送訊息和接收訊息
channel.basicConsume("queue1", true, new DeliverCallback() {
public void handle(String s, Delivery delivery) throws IOException {
System.out.println("收到訊息是:\t" + new String(delivery.getBody(), "UTF-8"));
}
}, new CancelCallback() {
public void handle(String s) throws IOException {
System.out.println("接收失敗");
}
});
System.out.println("開始接收訊息");
System.in.read();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally {
// 7 關閉通道
if (channel!= null && channel.isOpen()) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
// 8 關閉連線
if (connection != null && connection.isOpen()) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
當程式碼執行到 System.in.read()
時,此時訊息都被消費了
當服務重啟後,訊息佇列消失。
本作品採用《CC 協議》,轉載必須註明作者和本文連結