多语言通信基础 02 ZERORPC实现rpc调用

多语言通信基础 02 ZERORPC实现rpc调用,第1张

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"))

运行结果:

流式响应

 流式响应相对于一元调用最大的特征是服务端的数据是需要进行处理后在返给客户端的,例如服务端数据需要从其他节点获取,或者服务端需要进行迭代器式的处理后反数据给客户端。

服务端程序示例:

# _*_ 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)

运行结果:

zeromq的功能

zerorpc除了上述的功能外,它的zeromq还具有异步、限流、负载均衡等功能。

RPC需要解决的问题

考虑使用哪个RPC时候应该综合考虑如下问题:

  • ID映射
  • 传输协议TCP/HTTP
  • 数据的编码和解码http/ json/ xml/ 其他
  • 高并发处理
  • 负载均衡问题
  • 集群问题处理
  • 生态
  • 语言支持

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/715298.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存