OpenStack之RPC调用(二)

本文继续探讨OpenStack中的RPC通信,重点分析客户端如何向RabbitMQ发送RPC请求,服务器端接收并处理请求,以及客户端如何创建直接消费者等待响应。
摘要由CSDN通过智能技术生成

我们接着上篇博文,下面来分析一下客户端

4. 客户端:向主题服务器发送RPC请求

主题消费者创建完成后,客户端就可以向RabbitMQ服务器发送RPC请求了。还是先来看一下client.py

clinet.py

import rpc
TOPIC = 'sendout_request'
#消息体
msg = {'method': 'add',
       'args':{'v1':2, 'v2':3}}
rval = rpc.call(TOPIC, msg)  #发送rpc.call请求
print('Succeed implementing RPC call. the return value is %d.\n' % rval)
可以看到客户端最终会调用impl_kombu.py中的call方法,下面一起来看一下这个方法

impl_kombu.py

def call(topic, msg, timeout):
    print('Making synchronous call on %s ...\n' % topic)
    msg_id = DIRECT + str(uuid.uuid4())  #构造消息ID
    msg.update({'msg_id': msg_id})  #将消息ID加入消息体中
    print('MSG_ID is %s\n' % msg_id)
    conn = rpc.create_connection()
    wait_msg = CallWaiter(conn)
    conn.declare_direct_consumer(msg_id, wait_msg)
    conn.topic_send(topic, msg)
    return wait_msg.wait_reply()

上面的代码首先创建了与RabbitMQ服务器的连接,建立过程之前已经讨论过。然后依次实现了创建直接消费者和向主题交换器发送RPC请求,其中直接消费者用于接收服务器端的响应信息,其创建过程与上篇博文中分析的主题消费者的创建过程类似,这里就不展开讨论了。我们重点来看一下如何向主题交换器发送RPC请求吧,是通过Connection类中的topic_send方法实现的。

impl_kombu.py

class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值