RabbitMQ消息隊列生產者和消費者


概述

生產者生產數據至 RabbitMQ 隊列,消費者消費 RabbitMQ 隊列里的數據。

詳細

一、准備工作

1、安裝 RabbitMQ 服務和 RabbitMQ Management

RabbitMQ在windows下的安裝 (點擊查看) 

RabbitMQ官網(可下載安裝包)(點擊查看)

 

2、在 RabbitMQ 管理界面創建用戶 test 密碼 test,創建名為 test_vhost 的 Virtual Hosts ,將 test_vhost 分配 給 test用戶

3、本實例主要演示如何發送消息至 RabbitMQ 隊列 ,以及如何消費 RabbitMQ 隊列的消息

二、程序實現

1、程序結構

2.gif

 

2、實現思路

配置發送的 Exchange 和 Queue

    <rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
        auto-declare="true" auto-delete="false" exclusive="false" durable="true"
        declared-by="rabbitAdmin" />
        
    <!-- Exchange Type 為   topic 配置方法 -->
    <rabbit:topic-exchange id="exchange.topic.producer"
        auto-declare="true" name="exchange.topic.producer" auto-delete="false"
        durable="true" declared-by="rabbitAdmin">
        <rabbit:bindings>
            <rabbit:binding pattern="queue.ljaer.test" queue="queue.ljaer.test" />
        </rabbit:bindings>
    </rabbit:topic-exchange>

 

連接 RabbitMQ 發送數據至隊列

public class RabbitmqProducerTest {

    private static ApplicationContext context;

    public static void main(String[] args) {
        context = new ClassPathXmlApplicationContext("send-rabbitMq.xml");
        AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
        JSONObject json = new JSONObject();
        json.put("name", "張三");
        json.put("age", "15");
        amqpTemplate.convertAndSend("queue.ljaer.test", json);
        //amqpTemplate.convertAndSend("exchange.topic.producer","queue.ljaer.test", json);
        System.out.println("success");
    }
}

 

 

配置監聽

    <!--定義queue 接收數據 -->
    <rabbit:queue id="queue.ljaer.test" name="queue.ljaer.test"
        auto-declare="true" auto-delete="false" exclusive="false" durable="true"
        declared-by="rabbitAdmin" />

    <!-- 消息監聽器 -->
    <bean id="rabbitmqConsumerTest" class="com.test.mq.RabbitmqConsumerTest" />

    <!-- 隊列監聽 -->
    <rabbit:listener-container
        connection-factory="connectionFactory" acknowledge="auto">
        <rabbit:listener queues="queue.ljaer.test" ref="rabbitmqConsumerTest" />
    </rabbit:listener-container>

 

監聽消費 RabbitMQ 隊列的數據

public class RabbitmqConsumerTest implements MessageListener {
    
    public void onMessage(Message message) {
        System.out.println("receive message:{}"+message.getBody());
        try {
            String s = new String(message.getBody(), "UTF-8");
            System.out.println("------>MQ接收到的數據:"+s);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

3、配置文件說明

#mq
mq.host=192.168.99.100
mq.username=test
mq.password=test
mq.port=5672
mq.vhost=/test_vhost

三、運行效果

1、導入項目至 Eclipse,修改 rabbit.properties 里面的連接信息,連接至你本地的 RabbitMQ 服務

2、執行 RabbitmqProducerTest 的 main 方法,發送消息至 RabbitMQ 隊列

1.gif

3.gif

 

3、執行 RabbitmqConsumerMain 的 main 方法,進行隊列監聽,消費 RabbitMQ 隊列里的數據

4.gif

 

消費完之后,在 RabbitMQ Managemenet 里面查看也會看到隊列數據減少

四、其他補充

1、注意用 guest 用戶創建 test 用戶之后,需要使用 test 用戶登錄才能看到該用戶下的隊列數據

2、如果選擇其他類型的 exchange ,注意配文件與 mq 上保持一致

 

注:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM