RabbitMQ SpringBoot 工作模型 (多個消費者) 應用

一.工作模型 (多個消費者):

在這裏插入圖片描述
一個生產者、多個消費者。
紅色:隊列
一個消息只能被一個消費者獲取。

項目使用上一篇中的項目 rabbitmq-produce、rabbitmq-consumer

二.rabbitmq-consumer的改動

2.1 在rabbitmq-consumer 中,新增一個消費者RabbitMqConsumer2類

RabbitMqConsumer2的代碼如下:

package com.example.rabbitmqconsumer.consumer;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 基本消息模型(簡單隊列) 的消息消費者
 * @RabbitListener(queues = "simpleQueue") 監聽名爲simpleQueue的隊列
 */

@Component
@RabbitListener(queues = "simpleQueue")
public class RabbitMqConsumer2 {

    @Autowired
    private AmqpTemplate rabbitmqTemplate;

    private Logger logger = LoggerFactory.getLogger(RabbitMqConsumer2.class);

    /**
     * 消費消息
     * @RabbitHandler 代表此方法爲接受到消息後的處理方法
     */
    @RabbitHandler
    public void receiveMessage(String msg){
        logger.info("消費者2接收到的消息 :" + msg);
    }

}

三.rabbitmq-produce的改動

3.1 在rabbitmq-produce的配置文件application.yml有個注意點

在這裏插入圖片描述
RabbitMQ 將消息順序發送給多個消費者有兩種模式(公平分發、輪詢模式),
區別在於公平分發的prefetch默認是1,如果設置爲0就是輪詢模式。

1、公平分發:消費者1和消費者2獲取到的消息內容是不同的,同一個消息只能被一個消費者獲取。

2、輪詢模式: 消費者1和消費者2獲取到的消息的數量是相同的,一個是消費奇數號消息,一個是偶數。

四.測試

首先啓動生產者rabbitmq-produce項目。在postman或瀏覽器上訪問:
http://localhost:8783/TestController/testSimpleQueue POST請求
這時可以在rabbitmq-produce的控制檯可以看到
在這裏插入圖片描述
在rabbitMQ的可視化頁面中可以看到10個消息生成在這裏插入圖片描述
然後再啓動消費者rabbitmq-consumer工程,在rabbitmq-consumer可以看到:
在這裏插入圖片描述
兩個消費者平均獲取到消息,這就是輪詢模式。

在rabbitMQ的可視化頁面中可以看到10個消息已經被消費掉了
在這裏插入圖片描述

下一章,學習 Direct-Exchange 模式 在SpringBoot中的應用

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