RabbitMQ 消费端限流

文章介绍了如何在RabbitMQ中实现消费端限流,关键在于设置消费端确认模式为手动以及调整prefetch值。通过在application.yml配置prefetch属性为2,使得消费端每次处理两条消息,同时在消费者端使用手动确认机制控制消息的处理速度。
摘要由CSDN通过智能技术生成

RabbitMQ 消费端限流

说明: 
 1. 消费端的确认模式一定要设置为手动确认, acknowledge="manual"。
 2. 需要在application.yml中配置prefetch属性  prefetch:2 --  设置消费端一次从Queue中读取两条消息。

1. 设置acknowledge确认模式和prefetch属性

spring:
  rabbitmq:
    host: 192.168.192.137
    username: qmh
    password: qmh
    virtual-host: /qmh
    port: 5672
    listener:
      simple:
        # Consumer Ack
        acknowledge-mode: manual
        # 消费端一次从Queue中读取两条消息
        prefetch: 2

2. 消费者接收消息

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
import org.springframework.stereotype.Component;

/**
 * 消费端限流
 * 消费端的确认模式一定要设置为手动确认。acknowledge="manual"
 * 需要在application.yml中配置prefetch属性  prefetch:2 --  设置消费端一次从Queue中读取两条消息
 */
@Component
public class ListenerConsumerQos implements ChannelAwareMessageListener {
    @Override
    @RabbitListener(queues = "springboot_qos_queue")
    public void onMessage(Message message, Channel channel) throws Exception {
        Thread.sleep(1000);
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
            System.out.println(new String(message.getBody()));
            /**
             * 手动确认签收  basicAck(long deliveryTag, boolean multiple)
             * deliveryTag  标签
             * multiple     接收多条信息
             */
            channel.basicAck(deliveryTag,true);
        }catch (Exception e){
            /**
             * 签收失败 basicNack(long deliveryTag, boolean multiple, boolean requeue)
             * deliveryTag  标签
             * multiple     接收多条信息
             * requeue      true,消息重回Queue,broker重新发送该消息给消费者
             */
            channel.basicNack(deliveryTag,true,true);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值