RabbitMQ-消费端限流

文章目录

为什么要做消费端限流?

RabbitMQ-消费端限流
A系统每秒最大能处理1000请求,若这时开展了秒杀活动,请求瞬间增多,全部打到A系统上的话那A系统肯定会崩溃宕机什么的,这对业务正常运转造成了巨大的影响。所以我们把消息存入MQ中,然后每次从MQ中拉取1000个请求,保证A系统能正常运转,业务正常进行。

当有一天,A系统要维护了,维护期间会有大量消息堆积在MQ中,维护好了若让MQ中的消息全打入A系统的话,怕不是马上就挂。

所以我们需要在消费端限流,来保证系统的稳定性和业务的正常运转。

消费端限流的测试

配置文件中:
配置prefetch属性设置消费端一次拉取多少消息
消费端的确认模式一定为手动确认。acknowledge=“manual”

RabbitMQ-消费端限流
消费者:

/**
 * RabbitMQ消费端限流
 * 1.设置签收消息的方式为手动
 * 2.在listener-container中设置 每次拉取的消息数
 *                  prefetch="1" 表示每次从mq拉取1条消息,直到手动确认消费完后,才继续下次的消息拉取
 * 3.
 */
@Component
public class QosListener implements ChannelAwareMessageListener {

    public void onMessage(Message message, Channel channel) throws Exception {

        Thread.sleep(1000);

        long deliveryTag = message.getMessageProperties().getDeliveryTag();

        //1.获取消息
        System.out.println(new String(message.getBody()));
        //2.处理业务

        //3.签收消息
        channel.basicAck(deliveryTag,true);
    }

    public void onMessage(Message message) {

    }
}

每次从mq拉取固定条数消息,直到手动确认消费完后,才会继续下次的消息拉取。

上一篇:Unknown column 'startname' in 'field list


下一篇:2013级C++第14周(春)项目——多态性、虚函数和抽象类