一.簡單案例
1.創建Maven工程,pom.xml引入依賴
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
2.生產者
public class MyProducer {
private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 連接 IP
factory.setHost("127.0.0.1");
// 連接端口
factory.setPort(5672);
// 虛擬機
factory.setVirtualHost("/");
// 用戶
factory.setUsername("guest");
factory.setPassword("guest");
// 建立連接
Connection conn = factory.newConnection();
// 創建消息通道
Channel channel = conn.createChannel();
// 發送消息
String msg = "HelloWorld";
channel.basicPublish(EXCHANGE_NAME, "test.best", null, msg.getBytes());
channel.close();
conn.close();
}
}
3.消費者
public class MyConsumer {
private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
private final static String QUEUE_NAME = "SIMPLE_QUEUE";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();
// 聲明交換機(參數1.交換機名
// 2.交換機類型:direct,topic,fanout.
// 3.是否持久化,代表交換機在服務器重啓後是否還存在
// 4.是否自動刪除,設置爲TRUE則表是自動刪除,自刪除的前提是至少有一個隊列或者交
// 換器與這交換器綁定,之後所有與這個交換器綁定的隊列或者交換器都與此解綁.
// 5.其它一些結構化參數比如:alternate-exchange)
channel.exchangeDeclare(EXCHANGE_NAME,"direct",false, false, null);
// 聲明隊列(參數1 隊列名
// 2是否持久化,代表隊列在服務器重啓後是否還存在
// 3是否排他性隊列。排他性隊列只能在聲明它的 Connection中使用(可以在同一個
// Connection 的不同的 channel 中使用),連接斷開時自動刪除。
// 4.是否自動刪除。如果爲 true,至少有一個消費者連接到這個隊列,之後所有與這個隊列
// 連接的消費者都斷開時,隊列會自動刪除。
// 5.隊列的其他屬性
// )
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" Waiting for message....");
// 綁定隊列和交換機
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"test.best");
// 創建消費者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("Received message : '" + msg + "'");
System.out.println("consumerTag : " + consumerTag );
System.out.println("deliveryTag : " + envelope.getDeliveryTag());
}
};
// 開始獲取消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
5.打開控制檯localhost:15672.可觀察隊列內消息的動態變化