byz1123 2025-06-30 17:03 采纳率: 0%
浏览 9

rabbitmq消费问题

springboot项目,链接rabbitmq,配置了8线程消费,自动ack,每秒大概600的并发量,但是消费不过来出现积压,C#代码同样的配置进行消费就完全没有问题,消费消息的代码未做任何处理,本地建立mq测试,并发量可到上万消费速度也正常。

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-30 17:03
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    rabbitmq消费问题

    你遇到的问题是,使用 Spring Boot 连接 RabbitMQ,配置了 8 个线程消费消息,每秒大概 600 的并发量,但是消费消息的速度不够,远远低于本地测试的速度。

    可能的原因:

    1. RabbitMQ 的队列长度太小,导致消费者无法快速消费消息。
    2. RabbitMQ 的消息处理速度太慢,导致消费者无法快速消费消息。
    3. Spring Boot 应用程序的线程池太小,导致消费者无法快速消费消息。

    解决方案:

    1. 检查 RabbitMQ 的队列长度是否太小,可以使用 rabbitmqctl 命令来检查队列长度,或者使用 RabbitMQ 的管理界面来检查队列长度。
    2. 检查 RabbitMQ 的消息处理速度是否太慢,可以使用 rabbitmqctl 命令来检查消息处理速度,或者使用 RabbitMQ 的管理界面来检查消息处理速度。
    3. 检查 Spring Boot 应用程序的线程池是否太小,可以使用 ThreadPoolExecutorgetPoolSize() 方法来检查线程池的大小。

    代码示例:

    @Configuration
    public class RabbitConfig {
        @Bean
        public RabbitTemplate rabbitTemplate() {
            RabbitTemplate template = new RabbitTemplate();
            template.setConnectionFactory(connectionFactory());
            template.setAcknowledgeMode(AcknowledgeMode.MANUAL);
            return template;
        }
        
        @Bean
        public ConnectionFactory connectionFactory() {
            CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
            connectionFactory.setHost("localhost");
            connectionFactory.setPort(5672);
            connectionFactory.setUsername("guest");
            connectionFactory.setPassword("guest");
            return connectionFactory;
        }
    }
    
    @Service
    public class ConsumerService {
        @Autowired
        private RabbitTemplate rabbitTemplate;
        
        @RabbitListener(queues = "myQueue")
        public void consumeMessage(String message) {
            // 消息处理代码
        }
    }
    

    注意:在上面的代码示例中,我们使用 RabbitTemplate 来发送和接收消息,我们还使用 @RabbitListener 注解来监听 RabbitMQ 的队列。

    评论

报告相同问题?

问题事件

  • 修改了问题 6月30日
  • 创建了问题 6月30日