文章目錄
- 操作002:HelloWorld
- 一、目標
- 二、具體操作
- 1、創建Java工程
- ①消息發送端(生產者)
- ②消息接收端(消費者)
- ③添加依賴
- 2、發送消息
- ①Java代碼
- ②查看效果
- 3、接收消息
- ①Java代碼
- ②控制臺打印
- ③查看后臺管理界面
操作002:HelloWorld
一、目標
生產者發送消息,消費者接收消息,用最簡單的方式實現
官網說明參見下面超鏈接:
RabbitMQ tutorial - “Hello World!” — RabbitMQ
二、具體操作
1、創建Java工程
①消息發送端(生產者)
②消息接收端(消費者)
③添加依賴
<dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.20.0</version></dependency>
</dependencies>
2、發送消息
①Java代碼
不用客氣,整個代碼全部復制——當然,連接信息改成你自己的:
package com.atguigu.rabbitmq.simple; import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; public class Producer { public static void main(String[] args) throws Exception { // 創建連接工廠 ConnectionFactory connectionFactory = new ConnectionFactory(); // 設置主機地址 connectionFactory.setHost("192.168.200.100"); // 設置連接端口號:默認為 5672connectionFactory.setPort(5672);// 虛擬主機名稱:默認為 /connectionFactory.setVirtualHost("/");// 設置連接用戶名;默認為guest connectionFactory.setUsername("guest");// 設置連接密碼;默認為guest connectionFactory.setPassword("123456");// 創建連接 Connection connection = connectionFactory.newConnection(); // 創建頻道 Channel channel = connection.createChannel(); // 聲明(創建)隊列 // queue 參數1:隊列名稱 // durable 參數2:是否定義持久化隊列,當 MQ 重啟之后還在 // exclusive 參數3:是否獨占本次連接。若獨占,只能有一個消費者監聽這個隊列且 Connection 關閉時刪除這個隊列 // autoDelete 參數4:是否在不使用的時候自動刪除隊列,也就是在沒有Consumer時自動刪除 // arguments 參數5:隊列其它參數 channel.queueDeclare("simple_queue", true, false, false, null); // 要發送的信息 String message = "你好;小兔子!"; // 參數1:交換機名稱,如果沒有指定則使用默認Default Exchange // 參數2:路由key,簡單模式可以傳遞隊列名稱 // 參數3:配置信息 // 參數4:消息內容 channel.basicPublish("", "simple_queue", null, message.getBytes()); System.out.println("已發送消息:" + message); // 關閉資源 channel.close(); connection.close(); } }
②查看效果
3、接收消息
①Java代碼
不用客氣,整個代碼全部復制——當然,連接信息改成你自己的:
package com.atguigu.rabbitmq.simple; import com.rabbitmq.client.*; import java.io.IOException; public class Consumer { public static void main(String[] args) throws Exception { // 1.創建連接工廠 ConnectionFactory factory = new ConnectionFactory(); // 2. 設置參數 factory.setHost("192.168.200.100"); factory.setPort(5672); factory.setVirtualHost("/"); factory.setUsername("guest");factory.setPassword("123456"); // 3. 創建連接 Connection Connection connection = factory.newConnection(); // 4. 創建Channel Channel channel = connection.createChannel(); // 5. 創建隊列 // 如果沒有一個名字叫simple_queue的隊列,則會創建該隊列,如果有則不會創建 // 參數1. queue:隊列名稱 // 參數2. durable:是否持久化。如果持久化,則當MQ重啟之后還在 // 參數3. exclusive:是否獨占。 // 參數4. autoDelete:是否自動刪除。當沒有Consumer時,自動刪除掉 // 參數5. arguments:其它參數。 channel.queueDeclare("simple_queue",true,false,false,null); // 接收消息 DefaultConsumer consumer = new DefaultConsumer(channel){ // 回調方法,當收到消息后,會自動執行該方法 // 參數1. consumerTag:標識 // 參數2. envelope:獲取一些信息,交換機,路由key... // 參數3. properties:配置信息 // 參數4. body:數據 @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 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)); } }; // 參數1. queue:隊列名稱 // 參數2. autoAck:是否自動確認,類似咱們發短信,發送成功會收到一個確認消息 // 參數3. callback:回調對象 // 消費者類似一個監聽程序,主要是用來監聽消息 channel.basicConsume("simple_queue",true,consumer); } }
②控制臺打印
consumerTag:amq.ctag-8EB87GaZFP52LKSMcj98UA
Exchange:
RoutingKey:simple_queue
properties:#contentHeader(content-type=null, content-encoding=null, headers=null, delivery-mode=null, priority=null, correlation-id=null, reply-to=null, expiration=null, message-id=null, timestamp=null, type=null, user-id=null, app-id=null, cluster-id=null)
body:你好;小兔子!
③查看后臺管理界面
因為消息被消費掉了,所以RabbitMQ服務器上沒有了: