架构调整
1. 背景
最开始的RabbitMQ架构是主备模式,支持的并发和数据量不高。现决定部署一套采用镜像模式的集群架构,提升并发性能,但怎么从旧架构平滑切换到新架构成了首要问题。
2. 平滑切换方案
2.1 额外加载新增MQ配置
服务A原本加载的是mq主备配置,为了平滑过渡,额外加载mq镜像配置,这两份配置的区别就只是ip、端口、vhost、账号、密码不同,其他譬如交换器、队列的配置都相同。
2.2 分批次平滑切换队列
按队列的重要级别梳理出若干批队列,第一次先切换优先级低的队列到MQ镜像集群,观察数据流入情况。待稳定后,再切换下一批,直至所有队列都切换到MQ镜像集群。
2.3 遇到的坑
之前MQ主备上有些队列未开启持久化,但MQ镜像这边是需要为所有队列配置持久化的,当开启自动生成队列信息且项目启动的时候,MQ镜像这边会生成与MQ主备相同的队列,也就是未开启持久化的队列。
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
<rabbit:admin connection-factory="connectionFactory"/>
原因推测该管理类是单例,共用同一份数据。所以当加载多份MQ配置文件时,记得配置去掉自动生成的标签,手动到RabbitMQ的配置中心创建交换器、队列信息。