问题复现:
线上数据库监控cpu和并发比较高,根据具体sql,定位到具体的接口。
分析:
平台cms模块在发布之后需要异步处理后续的任务,之前统一用的是redis的发布订阅模式,采用的是广播模式,生产者发布后,每一个服务器节点都会消费对数据库进行查询和更新操作,数据库的cpu和并发瞬间增高。
解决方案:
1.在消费的代码,增加一个分布式锁,如果某个服务器节点处理过了,后续的请求就直接拦截,方法不妥,代码冗杂
2.用rocketMQ消息代替redis的发布订阅,消费方设置集群模式,只有一个服务器节点消费