记rabbitmq崩溃随笔

之前一直以为MQ是个很简单的东西,部署好后,知道怎么样用就好了。不就是生产者-消费者之间的消息传递嘛,还有几种消息模式,延时队列插件啥的,都会用就好。

直到在这家公司,自建的RabbitMQ稳定性一直很差,消费者老是起不来,偶尔又遇到幽灵队列的情况。终于,上周这个MQ终于顶不住了,又一开始排查出的脑裂情况,到后来直接宕机。。。导致忙活一宿去将各个大客户的MQ链接切换到新搭建的RabbitMQ去。

后来在新搭建的MQ中又发现了一系列问题,一路查下来又学习了好多rabbitmq的知识,写篇随笔记录下来。

 

一、单机版的RabbitMQ是最稳定的,但是吞吐量受限。

 

二、RabbitMQ的集群建好了,还要进行相关配置,不然白搭,还容易出岔子。

3.8+版本直接使用仲裁队列就好,这也是官方推荐的高可用方案。仲裁队列在创建队列时,指定队列类型即可。(在C#的EasyNetQ库中,使用QueueDeclareAsync方法,指定arguments: new Dictionary<string, object>().WithQueueType(queueType) 即可)

3.8以下版本,使用镜像队列,需要在策略中进行配置,无需重启MQ即可实时生效。若选择了镜像队列,尽量不要将队列镜像到所有节点,这会降低MQ的吞吐量。参考:https://www.rabbitmq.com/ha.html

 

三、RabbitMQ的配置文件配置分区处理策略,避免网络问题或其他情况导致MQ出现脑裂后,需要人工干预。

 

参考资料:

仲裁队列:https://www.rabbitmq.com/quorum-queues.html

RabbitMQ最佳实践指南:https://www.cloudamqp.com/blog/rabbitmq-checklist-for-production-environments-a-complete-guide.html

 

posted @ 2023-08-09 15:18  老铁你咋这么肥  阅读(184)  评论(0编辑  收藏  举报