rabbitmq高级特性 消费端限流

概念

rabbitmq可以做到限流功能 保证程序运行的稳定性 比如限制每秒最大值为1000条数据 那么假设有5000条数据打入
就会每秒执行1000条数据,保证程序的稳定性

简单使用

首先必须是手动确认模式
通过设置prefetch属性 可以设置消费者一次拉取多少条信息 在确认完毕后才能继续处理下一批
这里设置prefetch为1

spring:
  rabbitmq:
    host: 192.168.198.129
    port: 5672
    username: admin
    password: admin
    virtual-host: /
    publisher-confirm-type: correlated
    publisher-returns: true
    listener:
      direct:
        acknowledge-mode: manual
        prefetch: 1
      simple:
        acknowledge-mode: manual
        prefetch: 1

先发送10条信息在队列等待

    @Test void send(){
        for (int i = 0; i < 10; i++) {
            rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.haha","message: "+i);
        }
    }

编写监听者类 我们不写确认方法 即拿到信息后不确认 根据逻辑就会卡在那

@Component
public class RabbitMQListener {
    @RabbitListener(queues = "boot_queue")
    public void ListenerQueue(Message message, Channel channel){
        System.out.println(new String(message.getBody()));
        try {
            //确认
            //channel.basicAck(message.getMessageProperties().getDeliveryTag(),true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行程序观察可以看到信息被卡住了

通过prefetch属性可以设置消费者一次拉起消息的最大值 起到了限流的作用

posted @ 2021-10-05 16:21  一个经常掉线的人  阅读(344)  评论(0编辑  收藏  举报