RabbitMq,通过prefetchCount限制消费并发数

1.问题:项目瓶颈,通过rabbitMq来异步上传图片,由于并发上传的图片过多导致阿里OSS异常,
   解决方法:通过prefetchCount限制图片上传OSS的并发数量
2.定义消费者
@Component
@AllArgsConstructor
@Slf4j
public class ReceiveFaceImageEvent {

    private final UPloadService uploadService;


    /**
     * 采用 prefetchCount限制消费并发数
     */
    @RabbitHandler
    @RabbitListener(
            queues = "faceImageQueue",
            //指定了应该使用哪个RabbitListenerContainerFactory来创建消息监听容器
            containerFactory = "limitRabbitListenerContainerFactory",
            //这设置了并发消费者的数量范围。在这个例子中,它设置了两个并发消费者,这意味着同时有两个线程可以处理来自该队列的消息。
            //(concurrency 控制特定监听器的并发消费者数量,而 setMaxConcurrentConsumers 控制通过工厂创建的所有监听器的并发消费者数量的上限。两者并不直接冲突,但 concurrency 会覆盖工厂级别的设置(对于设置了concurrency的监听器而言))
            concurrency = "2-2"
    )
    public void handler(MqMessage mqMessage){
        FaceImageInput input= (FaceImageInput) mqMessage.getObj();
        uploadService.uploadImage(input.getFaceImageUrl());
    }
}
3.创建RabbitMQ消息监听容器的工厂类。
@Configuration
public class RabbitAutoConfiguration {
    @Bean("limitRabbitListenerContainerFactory")
    public SimpleRabbitListenerContainerFactory limitRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        //设置最大消费者   (设置此监听容器工厂创建的监听容器的最大并发消费者数量为5。这意味着在任何时候,都将有最多5个消费者线程并发地从RabbitMQ队列中拉取消息。)
        factory.setMaxConcurrentConsumers(5);
        //设置预取,计数为30。(预取是RabbitMQ消费者从队列中预先拉取但尚未处理的消息数量。当消费者处理消息的速度跟不上从队列中拉取消息的速度时,这个设置可以帮助减少消费者的空闲时间。但是,如果设置得太高,可能会导致消费者处理不过来,从而增加消息的延迟。)
        factory.setPrefetchCount(30);
        //设置了消息确认模式为自动确认(当消息被消费者处理完成后,RabbitMQ将自动认为该消息已被成功处理,并从队列中删除)
        factory.setAcknowledgeMode(AcknowledgeMode.AUTO);
        return factory;
    }

}

相关推荐

  1. RabbitMq,通过prefetchCount限制消费并发

    2024-07-13 02:08:01       20 阅读
  2. rabbitmq解除消息消息推送限制

    2024-07-13 02:08:01       21 阅读
  3. Go 之缓冲通道限制协程并发数目

    2024-07-13 02:08:01       31 阅读
  4. RabbitMQ延迟消息通过死信交换机实现)

    2024-07-13 02:08:01       21 阅读
  5. Rabbitmq消息重复消费

    2024-07-13 02:08:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 02:08:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 02:08:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 02:08:01       58 阅读
  4. Python语言-面向对象

    2024-07-13 02:08:01       69 阅读

热门阅读

  1. C#中的泛型

    2024-07-13 02:08:01       18 阅读
  2. 力扣636.函数的独占时间

    2024-07-13 02:08:01       19 阅读
  3. day19打卡

    2024-07-13 02:08:01       16 阅读
  4. 【qml学习笔记】在qml中连接信号与槽

    2024-07-13 02:08:01       22 阅读
  5. 【第20章】MyBatis-Plus逻辑删除支持

    2024-07-13 02:08:01       13 阅读
  6. AI agents 印象

    2024-07-13 02:08:01       18 阅读
  7. Kafka 面试题精选

    2024-07-13 02:08:01       23 阅读