RabbitMQ的簡單(即simple)模式示例代碼

1、RabbitMQ官網簡單(即simple)模式的架構圖

在這裏插入圖片描述

2、pom文件需要引入有關MQ的2個依賴包

 <dependency>
   <groupId>org.springframework.amqp</groupId>
     <artifactId>spring-rabbit</artifactId>
     <version>1.4.0.RELEASE</version>
 </dependency>
 <dependency>
     <groupId>com.rabbitmq</groupId>
     <artifactId>amqp-client</artifactId>
     <version>3.4.1</version>
 </dependency>

3、MQ獲取連接工具類代碼如下:

package com.rf.rabiitmq.util;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @description: mq連接工具類
 * @author: xiaozhi
 * @create: 2020-04-21 09:03
 */
public class ConnectionUtil {
    /** 
    * @Description: 獲取mq連接方法
    * @Param: [] 
    * @Author: xz  
    * @return: com.rabbitmq.client.Connection
    * @Date: 2020/4/21 9:19
    */ 
    public static Connection getConnection() throws Exception {
        //定義連接工廠
        ConnectionFactory connectionFactory=new ConnectionFactory();
        //以下信息,在安裝mq後,登錄mq客戶端進行配置的信息
        connectionFactory.setHost("localhost");//設置服務地址
        connectionFactory.setPort(5672);//設置端口
        connectionFactory.setVirtualHost("xzVirtualHosts");//設置虛擬主機名稱
        connectionFactory.setUsername("xz");//設置用戶名
        connectionFactory.setPassword("xz");//設置密碼
        //通過連接工廠獲取連接
        Connection connection = connectionFactory.newConnection();
        return connection;
    }
}

4、消息發送者,即服務端代碼如下:。

package com.rf.rabiitmq.simple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rf.rabiitmq.util.ConnectionUtil;
/**
 * @description: simple模式  消息發送者
 * @author: xiaozhi
 * @create: 2020-04-21 08:59
 */
public class SimpleSend {
    private final static String QUEUE_NAME="simple_queue";//聲明隊列名稱
    public static void main(String[] args) throws Exception {
        //獲取連接
        Connection connection = ConnectionUtil.getConnection();
        //從連接中創建通道
        Channel channel = connection.createChannel();
        /**
         * 聲明隊列
         * @param1 隊列的名稱
         * @param2 是否持久化 如果true(該隊列將在服務器重啓後繼續存在)
         * @param3 是否排外  即只允許該channel訪問該隊列   一般等於true的話用於一個隊列只能有一個消費者來消費的場景
         * @param4 如果我們聲明一個自動刪除隊列(服務器將在不再使用時刪除它)
         * @param5 參數隊列的其他屬性(構造參數)
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);

        //發佈消息
        String message="後臺系統發佈了消息,今天天氣大風。";
        /**
         * @param1 交換機名稱
         * @param1 隊列名稱
         * @param1 其他屬性
         * @param1 body消息體
         * */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println(message);

        //關閉通道和連接
        channel.close();
        connection.close();
    }
}

5、消息接收者,即客戶端代碼如下:

package com.rf.rabiitmq.simple;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import com.rf.rabiitmq.util.ConnectionUtil;
/**
 * @description: simple模式   客戶端
 * @author: xiaozhi
 * @create: 2020-04-21 08:58
 */
public class SimpleReceive {

    private final static String QUEUE_NAME="simple_queue";//聲明隊列名稱

    public static void main(String[] args) throws Exception{
        //獲取mq連接
        Connection connection = ConnectionUtil.getConnection();
        //創建通道
        Channel channel = connection.createChannel();

        /**
         * 聲明隊列
         * @param1 隊列的名稱
         * @param2 是否持久化 如果true(該隊列將在服務器重啓後繼續存在)
         * @param3 是否排外  即只允許該channel訪問該隊列   一般等於true的話用於一個隊列只能有一個消費者來消費的場景
         * @param4 如果我們聲明一個自動刪除隊列(服務器將在不再使用時刪除它)
         * @param5 參數隊列的其他屬性(構造參數)
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //定義隊列消費者
        QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
        /**
         * 監聽隊列 自動完成
         * @param1 隊列名稱
         * @param2 如果true,服務器應該考慮消息
         * @param3 回調消費者對象的接口
         * */
        channel.basicConsume(QUEUE_NAME,true,queueingConsumer);

        //獲取消息
        while(true){
            //等待下一個消息傳遞並返回它
            QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
            //檢索消息體
            String message= new String(delivery.getBody());
            System.out.println("客戶端接收消息:"+message);
        }
    }
}

6、啓動服務端代碼

1)、啓動消息發送者,即服務端代碼,控制檯輸出如下圖:
在這裏插入圖片描述2)、rabbitMQ客戶端頁面可以看到名字爲simple_queue列隊中有一條數據,如下圖:
在這裏插入圖片描述

7、啓動客戶端代碼:

1)、啓動消息接收者,即客戶端代碼。輸出如下圖:
在這裏插入圖片描述
2)、rabbitMQ客戶端頁面可以看到名字爲simple_queue列隊中有數據已被消費,變成0條數據,如下圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章