美文网首页
SpringBoot RabbitMQ不定期出现未消费问题定位(

SpringBoot RabbitMQ不定期出现未消费问题定位(

作者: kingbo1587 | 来源:发表于2021-04-02 17:23 被阅读0次

    现象

    MQ消费端不定期出现不消费,间隔几天不等。工程重启后,总是恢复消费。

    分析

    消费端会进行http请求,而请求会出现超时情况,甚至出现请求一直不释放的情况。怀疑与网路有关,且目前无法优化。
    按道理请求不释放,只影响一个消费线程,不应该影响其他消费。

    原因

    发现是prefetch没有配置,SpringBoot默认prefetch为250。因此一个消费线程,一次会拉取最多250个消息,如果其中一个消息卡住了,该线程后续的消息都会卡住,导致消息不能ack。

    解决

    将prefetch设置为1。同时增加了http请求清理。

    总结

    起初定位一脸懵,请求超时的情况,是很快发现了。但是为什么导致其他消息挤压,就比较抓瞎。主要还是对于RabbitMQ的prefetch理解不到位。prefetch用于客户端一次性拉取多条消息,减少IO耗时,但是如果消费端本身处理就比较耗时,设置的过大反而得不偿失,甚至造成一个线程拉取到很多消息,在慢慢消费,其他前程在围观的情况。

    prefetch 使用场景
    1 消费端处理比较耗时
    30 消费端处理比较快, RabbitMQ官网推荐
    250 SpringBoot 默认

    相关文章

      网友评论

          本文标题:SpringBoot RabbitMQ不定期出现未消费问题定位(

          本文链接:https://www.haomeiwen.com/subject/orhahltx.html