问题描述: 在使用AMQP异步RPC时,通过返回值的futures可能导致意外的返回值。
解决方法:
import amqp
# 定义回调函数
def on_rpc_response(response):
# 处理RPC响应结果
print(response)
# 发送RPC请求
def send_rpc_request():
# 创建AMQP连接
connection = amqp.Connection()
# 创建AMQP通道
channel = connection.channel()
# 设置回调函数
channel.set_rpc_response_callback(on_rpc_response)
# 发送RPC请求
channel.rpc_send('rpc_queue', 'rpc_request')
# 关闭连接
connection.close()
# 主程序入口
if __name__ == '__main__':
send_rpc_request()
import amqp
import asyncio
# 定义协程函数
async def rpc_request():
# 创建AMQP连接
connection = amqp.Connection()
# 创建AMQP通道
channel = connection.channel()
# 发送RPC请求
channel.rpc_send('rpc_queue', 'rpc_request')
# 挂起协程
await asyncio.sleep(1)
# 获取RPC响应结果
response = channel.rpc_get_response()
# 处理响应结果
print(response)
# 关闭连接
connection.close()
# 主程序入口
if __name__ == '__main__':
# 创建事件循环
loop = asyncio.get_event_loop()
# 执行协程函数
loop.run_until_complete(rpc_request())
# 关闭事件循环
loop.close()
这样,通过使用回调函数或协程,可以避免AMQP异步RPC中由于返回值的futures导致的意外返回值问题。