RPC服务
RPC(Remote Procedure Call)远程服务调用,区别在于worker处理完成之后,会将处理的结果通过队列传递给client端。
1.client端
- 新建一个连接类
1 | import pika |
- 在init中建立连接通道,并且回复replies声明独享的回调队列
1 | def __init__(self): |
- 书写一个on_response函数,来接收server服务器返回的内容
1 | # on_response回调函数对每一个响应执行一个非常简单的操作,检查每一个响应的corrrlation_id属性是否与我们期待的一致 |
- 书写call方法,用来发送消息,并通过properties的reply_to和correlation_id将回调队列和消息标记传给server
1 | # 接下来,我们定义我们的主要方法call方法,它执行真正的RPC请求 |
- 启动服务
1 | fibonacci_rpc = FibonacciRpcClient() |
2.server端
- 像往常一样,我们建立队列,声明队列
1 | connection = pika.BlockingConnection(pika.ConnectionParameters('123.207.154.169')) |
- 声明我们的fibonacci函数,它假设只有合法的正整数当做输入。
1 | def fib(n): |
- 为basic_consume声明一个回调函数,这是RPC服务器端的核心。它执行实际的操作并且做出响应
1 | def on_request(ch,method,props,body): |
- 或许我们希望能再服务器上多开几个线程。为了能将负载平均的分配到多个服务器,我们需要将prefetch_cou
nt设置好
1 | channel.basic_qos(prefetch_count=1) |