RabbitMQ高級特性第2篇-消費端限流

一、消費端限流原理圖

 

二、消費端限流實現步驟

1、確保Ack機制爲手動確認機制

2、配置屬性perfetch:設置每次拉取消息的數量

  •  以上兩個配置只需要在application.yml配置即可
# 配置RabbitMQ基本信息
spring:
  rabbitmq:
    host: 192.168.33.100
    username: guest
    password: guest
    virtual-host: /
    port: 5672
    listener:
      simple:
        acknowledge-mode: manual # 設置消費端手動 ack
        prefetch: 2 # 限流,設置消費端併發處理消息的數量,必須設置acknowledge-mode: manual 纔有效

3、監聽消息方法方法

  • 處理完消息之後必須手動簽收
@Component
public class RabbitMQConfig {
  
    /**
     * Consumer 消息限流
     * 限流機制:
     *  1. 確保ack機制爲手動確認
     *  2. 在application.yml設置prefetch屬性:設置消費端併發處理消息的數量
     *      比如:prefetch = 1 表示消費端每次從mq拉取一條消息,直到手動確認消費完畢之後,纔會繼續拉取下一條消息
     */
    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(value = "xkp_topic_exchange",type = "topic"),
            value = @Queue(value = "xkp_queue",durable = "true"),
            key = "xkp.#"
    ))
    public void handlerMessage(Message message, Channel channel)throws Exception {
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        Thread.sleep(1000);
        // 1. 轉換消息
        System.out.println("消息內容: " + new String(message.getBody()));
        // 處理消息
        // .............
        // 2. 手工簽收
        channel.basicAck(deliveryTag,true);
    }
}

 

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