JAVA-RabbitMQ使用示例
阿新 • • 發佈:2019-01-08
準備工作
匯入相關的jar包,一般maven依賴的話只要在pom檔案當中加入下面座標就好。 <dependency><groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.0</version>
</dependency>
HelloWorld示例
生產者package com.xh.rabbitmq;
import java.io.IOException; import java.util.concurrent.TimeoutException; 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 IOException, TimeoutException { //例項化工廠 ConnectionFactory factory = new ConnectionFactory(); //設定相關引數,地址,埠,賬號,密碼 factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); //獲取connection Connection conn = factory.newConnection(); //獲取channel Channel channel = conn.createChannel(); //建立佇列 1-佇列名稱 2-佇列是否持久化 3-是否是排他佇列 4-使用完之後是否刪除此佇列 5-其他屬性 channel.queueDeclare("hello", false, false, false, null); //建立路由 1-路由名稱 2-路由型別 channel.exchangeDeclare("myexchange", "topic"); //繫結路由佇列 1-佇列名稱 2-路由名稱 3-routing key channel.queueBind("hello", "myexchange", "shensha"); //傳送訊息 1-路由名稱 2-routing key 3-其他資訊 4-訊息位元組陣列 channel.basicPublish("myexchange", "shensha", null, "HelloWorld".getBytes()); //關閉資源 channel.close(); conn.close(); } }
package com.xh.rabbitmq; import java.io.IOException; import com.rabbitmq.client.AMQP.BasicProperties; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; public class Consumer { public static void main(String[] args) { // 例項化工廠 ConnectionFactory factory = new ConnectionFactory(); // 設定相關引數,地址,埠,賬號,密碼 factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); try { // 獲取connection Connection conn = factory.newConnection(); // 獲取channel Channel channel = conn.createChannel(); // 建立佇列 1-佇列名稱 2-佇列是否持久化 3-是否是排他佇列 4-使用完之後是否刪除此佇列 5-其他屬性 channel.queueDeclare("hello", false, false, false, null); //消費訊息. 1-消費佇列 2-是否自動傳送訊息回執 3-回撥函式 channel.basicConsume("hello", true, new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println("接收到的訊息為: " + message); } }); } catch (Exception e) { e.printStackTrace(); } } }
消費者在消費的時候,也需要嘗試建立佇列.因為如果消費者消費的佇列不存在的話,會出現異常情況.如果消費者建立的佇列已經存在的話,RabbitMQ不會做任何事情.在進行消費的時候,需要設定自動傳送回執ACK給服務端,當服務端接收到這個回執之後,確認消費者已經成功消費該訊息時,RabbitMQ會從訊息隊列當中刪除該訊息. 回撥函式,是重寫的介面當中的方法,進行接收訊息,以便做進一步的處理. 消費者不用關閉資源連線,因為它要一直監聽佇列,當隊列當中有訊息進來的時候,會消費該訊息. 執行該示例,生產者控制檯為:
消費者控制檯為:
以上是JAVA簡單的RabbitMQ示例.