问题描述
有两个队列route_msg 和 async_db,都绑定到了一个类型为 direct 的 exchange 上面。
程序有个消费者线程(consumerA)
操作一:
从 route_msg 中获取客户端上传上来的消息,处理完成之后。
操作二:
把需要异步写 db 的操作发送到 async_db 队列中去。
操作三:
同时有另外一个消费者线程(consumerB) 消费 async_db 上的消息,入库。
在实际运行的过程中,我发现当把操作二、三代码注释以后,操作一中的消费者消费速度是正常的,但是当我把操作二、操作三打开之后,consumerA 的消费速度显著下降.从140/s 降到 45/s,现象如下图所示,第一张图是只消费route_msg, 第二张图是同时消费 route_msg 和 async_db 两个队列。
问题出现的环境背景及自己尝试过哪些方法
RabbitMQ、程序都在同一台centos 7机器上,网卡百兆.
看网络流量都是正常的,是 rabbitMQ 用法不正确吗?
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
# 消费route_msg 队列中的消息
def consumeMsg(body, message):
self.msg_dispatch.dispatch(body) # 处理完后会将异步操作入队列 async_db
message.ack()
# 消费 async_db 队列中的消息
def consumeDBRequest(body, message):
self.syncDB(body)
message.ack()
你期待的结果是什么?实际看到的错误信息又是什么?
预期其他队列的消费者 route_msg 这个队列的消费者的消费速度无影响。
将 async_db 队列的消费者分离出来,单独放到一个进程中去就没影响,是 python 多线程原因吗?