我们接着上篇博文,下面来分析一下客户端
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