zerorpc是利用zeroMQ消息队列+msgpack消息序列化(二进制)来实现类似grpc的功能跨语言远程调用。
主要使用到zeroMQ的通信模式是ROUTER-DEALER,模拟grpc的请求-响应式和应答流式 RPC:
zerorpc还支持 PUB-SUB通信模式的远程调用。
zerorpc同时支持python和node.js两种语言。
zerorpc实际上会依赖msgpack-python、pyzmg、future、greenlet、gevent
GitHub - 0rpc/zerorpc-python: zerorpc for pythonhttps://github.com/0rpc/zerorpc-python
安装
pip install zerorpc
程序示例:
我们直接使用他的服务端和客户端程序即可:
# server端 zerorpc --server --bind tcp://*:1234 time
# client端 zerorpc --client --connect tcp://127.0.0.1:1234 strftime %Y/%m/%d
运行结果如下:
上面展示了一个简单的zerorpc调用结果。除此而外,我们在使用的时候可以有多种方式:
- 一元调用
- 流式调用
- 传入多个参数
一元调用的方法和正常的rpc调用一样分三步。
流式响应服务端程序示例:
# _*_ coding:utf-8 _*_ __author__ = 'wulian' __date__ = '2022/4/18 0018 11:03' import zerorpc class HelloRpc(object): def hello(self, name): return "hello, %s" % name # 实例化server , 绑定业务逻辑 s = zerorpc.Server(HelloRpc()) # 绑定ip和端口 s.bind("tcp://0.0.0.0:8080") # 启动 s.run()
客户端程序示例:
# _*_ coding:utf-8 _*_ __author__ = 'wulian' __date__ = '2022/4/18 0018 11:06' import zerorpc c = zerorpc.Client() c.connect("tcp://127.0.0.1:8080") print(c.hello("RPC"))
运行结果:
流式响应相对于一元调用最大的特征是服务端的数据是需要进行处理后在返给客户端的,例如服务端数据需要从其他节点获取,或者服务端需要进行迭代器式的处理后反数据给客户端。
zeromq的功能服务端程序示例:
# _*_ coding:utf-8 _*_ __author__ = 'wulian' __date__ = '2022/4/18 0018 11:16' # 流式调用 import zerorpc class StreamingRPC(object): @zerorpc.stream def streaming_range(self, fr, to, step): return range(fr, to, step) # 实例化server , 绑定业务逻辑 s = zerorpc.Server(StreamingRPC()) # 绑定ip和端口 s.bind("tcp://0.0.0.0:8080") # 启动 s.run()
客户端程序示例:
# _*_ coding:utf-8 _*_ __author__ = 'wulian' __date__ = '2022/4/18 0018 11:16' # 流式调用 import zerorpc c = zerorpc.Client() c.connect("tcp://127.0.0.1:8080") for item in c.streaming_range(10, 20, 2): print(item)
运行结果:
zerorpc除了上述的功能外,它的zeromq还具有异步、限流、负载均衡等功能。
RPC需要解决的问题考虑使用哪个RPC时候应该综合考虑如下问题:
- ID映射
- 传输协议TCP/HTTP
- 数据的编码和解码http/ json/ xml/ 其他
- 高并发处理
- 负载均衡问题
- 集群问题处理
- 生态
- 语言支持
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)