思路:(易->难)
1.新增服务器,增加消费端数量。
2.服务器端开启多线程消费消息(默认单线程监听队列),需要注意多线程可能带来的并发问题。
3.优化消费端处理逻辑,提升消息消费速率即系统优化。
背景:本系统为小型支付系统,商户618活动期间,用户购买商品付款后迟迟收不到支付结果异步通知。
问题排查:排查日志,发现收单渠道方推送支付结果异步通知正常。回调服务(本系统通知商户支付结果服务)消费队列消息滞后,导致商户不能及时收到支付结果。
消费端监听消息:此模式默认单线程监听队列
@RabbitHandler
@RabbitListener(queues = MQConstant.ZFB_HANDLER_QUEUE)
public void zfbReceiveMsg(Map<String, Object> map, Message message, Channel channel) throws IOException {
//dosomething
}
消费端监听消息:此模式开启多线程监听队列
concurrency = "5-8":表示开启5个线程监听队列,最大为8个线程(依据服务器负载情况)
当然也可以在RabbitListenerContainerFactory的配置中指定线程数。
@RabbitHandler
@RabbitListener(queues = MQConstant.ZFB_HANDLER_QUEUE, concurrency = "5-8")
public void zfbReceiveMsg(Map<String, Object> map, Message message, Channel channel) throws IOException {
//dosomething
}