RabbitMQ consumer 与 producer 在同一个进程中,消费速度会受影响

问题描述

有两个队列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 多线程原因吗?
阅读 1.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题