使用 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。且一直不消费
重启 nameko rpc 客户端的程序(kill 进程)问题就会随之消失
队列页面的详情是这样
消费者页面详情是这样
至于问题产生的原因,还不清楚,需要等下一次再发生的时候,再进一步调查
不过我初步怀疑是引入了一些和 eventlet 协程不兼容的代码,导致 cpu 会夺走导致的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。