如何在 OpenStack 中捕获对应于 RPC.call Request 消息的回复 rabbitmq 消息?

Posted

技术标签:

【中文标题】如何在 OpenStack 中捕获对应于 RPC.call Request 消息的回复 rabbitmq 消息?【英文标题】:How to capture reply rabbitmq message Corresponding to a RPC.call Request message in OpenStack? 【发布时间】:2013-12-19 02:40:14 【问题描述】:

RPC 调用和强制转换是 OpenStack 中两种不同类型的消息传递协议。在 RPC.call 的情况下,调用者(或调用者)等待来自工作人员(被调用者)的回复或确认消息。

我正在尝试拦截通过 OpenStack 中的 rabbitmq 系统的所有 RPC 消息(请求和回复消息)。在 OpenStack 中,所有请求消息都通过一个名为“nova”的交换器。将新队列附加到“nova”交换,我可以捕获请求消息。

现在,我想捕获发送回被调用者的回复消息。回复消息可以被AMQP and Nova指定的“直接消费者”捕获,摘录如下

a Direct Consumer comes to life if (an only if) a rpc.call operation is executed; this object is    
instantiated and used to receive a response message from the queuing system; Every consumer connects to  
a unique direct-based exchange via a unique exclusive queue; its life-cycle is limited to the message 
delivery; the exchange and queue identifiers are determined by a *UUID generator*, and are marshaled in 
the message sent by the Topic Publisher (only rpc.call operations).

为了捕获回复消息,我尝试连接到具有相应 msg_id 或 request_id 的直接交换。我不确定捕获特定 rpc.call 回复的正确交换 ID 是什么。

知道我可以用来从 rpc.call 消息中捕获回复的交换 id 是什么吗?我附上的摘录中指定的 UUID 生成器是什么?

【问题讨论】:

【参考方案1】:

我不知道 OpenStack 实现的细节,但是在通过消息系统执行 RPC 时,通常消息带有一个 correlation_id 标识符,应该用于跟踪请求。

见:http://www.rabbitmq.com/tutorials/tutorial-six-python.html

【讨论】:

以上是关于如何在 OpenStack 中捕获对应于 RPC.call Request 消息的回复 rabbitmq 消息?的主要内容,如果未能解决你的问题,请参考以下文章

openstack rpc机制

分布式系统中的消息传递与 RPC(Openstack 与 K8s/Swarm)

OpenStack RPC框架浅析

必须了解的4种OpenStack Neutron网络(上)

微服务实践之路--RPC

openstack中创建一个虚拟机经过的51步