使用 nameko standalone rpc 调用其他 rpc 服务的示例代码:

from nameko.standalone.rpc import ClusterRpcProxy

with ClusterRpcProxy(config) as cluster_rpc:
    parse_result_json = cluster_rpc.parse_rpc_service.parse_rpc_v3(
        parser_result.json(ensure_ascii=False)
    )

先明确两个角色:

  • nameko rpc 客户端,上面的代码就是客户端代码
  • nameko rpc 服务端

遇到了一个问题,就是 rpc 服务端已经返回数据了(服务端是把数据推到 rabbitmq 即视为返回数据完成),但是 rpc 客户端一直处于数据消费中。所以问题是出在客户端,而不是服务端

出现了类似下面格式的 10个队列

http://xxxx:15672/#/queues/xxx-test/rpc.reply-standalone_rpc_proxy-cde4457d-a580-4672-8a94-1cf4b5fce9f0

http://xxxx:15672/#/queues/xxx-test/rpc.reply-standalone_rpc_proxy-a1ad897c-48d6-4ff0-b975-9e83ec79916d

问题从 rabbitmq 看就是 total 列的值是 1,unacked 也是 1。且一直不消费

图片.png

重启 nameko rpc 客户端的程序(kill 进程)问题就会随之消失

队列页面的详情是这样

图片.png

消费者页面详情是这样

图片.png

至于问题产生的原因,还不清楚,需要等下一次再发生的时候,再进一步调查

不过我初步怀疑是引入了一些和 eventlet 协程不兼容的代码,导致 cpu 会夺走导致的


universe_king
3.4k 声望678 粉丝