首先要下載rabbitmq的javaClient庫,然后加入到項目中,下載地址為:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1.5/rabbitmq-java-client-bin-3.1.5.zip
1、發送消息
發送消息首先要獲取與rabbitmq-server的連接,然后從渠道(chann)中指定的queue發送消息 , 不能定義兩個queue名字相同,但屬性不同
示例:
Sender01.java
1 package com.zf.rabbitmq01; 2 3 import java.io.IOException; 4 5 import com.rabbitmq.client.Channel; 6 import com.rabbitmq.client.Connection; 7 import com.rabbitmq.client.ConnectionFactory; 8 9 /** 10 * 發送消息 11 * @author zhoufeng 12 * 13 */ 14 public class Sender01 { 15 16 public static void main(String[] args) throws IOException { 17 18 ConnectionFactory connFac = new ConnectionFactory() ; 19 20 //RabbitMQ-Server安裝在本機,所以直接用127.0.0.1 21 connFac.setHost("127.0.0.1"); 22 23 //創建一個連接 24 Connection conn = connFac.newConnection() ; 25 26 //創建一個渠道 27 Channel channel = conn.createChannel() ; 28 29 //定義Queue名稱 30 String queueName = "queue01" ; 31 32 //為channel定義queue的屬性,queueName為Queue名稱 33 channel.queueDeclare( queueName , false, false, false, null) ; 34 35 String msg = "Hello World!"; 36 37 //發送消息 38 channel.basicPublish("", queueName , null , msg.getBytes()); 39 40 System.out.println("send message[" + msg + "] to "+ queueName +" success!"); 41 42 channel.close(); 43 conn.close(); 44 45 } 46 47 }
Recv01.java
1 package com.zf.rabbitmq01; 2 3 import java.io.IOException; 4 5 import com.rabbitmq.client.Channel; 6 import com.rabbitmq.client.Connection; 7 import com.rabbitmq.client.ConnectionFactory; 8 import com.rabbitmq.client.ConsumerCancelledException; 9 import com.rabbitmq.client.QueueingConsumer; 10 import com.rabbitmq.client.QueueingConsumer.Delivery; 11 import com.rabbitmq.client.ShutdownSignalException; 12 13 /** 14 * 接收消息 15 * @author zhoufeng 16 * 17 */ 18 public class Recv01 { 19 20 public static void main(String[] args) throws IOException, ShutdownSignalException, ConsumerCancelledException, InterruptedException { 21 22 ConnectionFactory connFac = new ConnectionFactory() ; 23 24 connFac.setHost("127.0.0.1"); 25 26 Connection conn = connFac.newConnection() ; 27 28 Channel channel = conn.createChannel() ; 29 30 String queueName = "queue01"; 31 32 channel.queueDeclare(queueName, false, false, false, null) ; 33 34 //上面的部分,與Sender01是一樣的 35 36 //配置好獲取消息的方式 37 QueueingConsumer consumer = new QueueingConsumer(channel) ; 38 channel.basicConsume(queueName, true, consumer) ; 39 40 //循環獲取消息 41 while(true){ 42 43 //獲取消息,如果沒有消息,這一步將會一直阻塞 44 Delivery delivery = consumer.nextDelivery() ; 45 46 String msg = new String(delivery.getBody()) ; 47 48 System.out.println("received message[" + msg + "] from " + queueName); 49 } 50 51 } 52 53 }
此時,無論先后啟動哪個類 ,都沒有關系 ,如果執行Sender01時 Recv01還沒有啟動 , 那么消息將被保存在RabbitMQ-Server上面,直到Recv01啟動后獲取,才會被移除
