dubbo协议层 jsonrpc协议迁移到http协议
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo协议层 jsonrpc协议迁移到http协议相关的知识,希望对你有一定的参考价值。
参考技术A 周末看到社区的协议迁移开始被提交了pr,还没merge,打算拜读一下看到 HttpRemoteInvocation 被更改了,这里是要把 json-rpc 协议转换为 http 协议
HTTP 请求本身也可以看做是 RPC 的一种具体形式。HTTP 请求也一样是可以从本地发一个信号到服务器,服务器上执行某个函数,然后返回一些信息给客户端。
经常用的一些数据通过HTTP协议来传输,thrift,grpc,xml-rpc,json-rpc都是通过HTTP传输的。也就说json-rpc是依赖http协议传输的,所以新建一个公共的代理协议,凡是用http协议传输的数据格式都设置这个协议,是比较好的方案。
根据dubbo的类机构继承图,是沿用SPI机制实现的 AbstractProxyProtocol
这里比较重要的是 protocolBindingRefer 方法。,构建一个DubboInvoker对象,根据dubbo的动态代理不断找到调用方的目标对象,添加到invoke当中,但这里没有指定要传输的格式,所以在dubbo序列化的时候还是会走默认的hessian协议,需要对协议中传入的格式进行校验
基本思路:将参数中的service(传输格式传入)设置到dubbo的代理,拿到代理之后添加到invoke的责任链当中,返回一个dubbo的代理对象给调用方
Odoo使用jsonrpc协议
- 在controller添加一个test方法, 不需参数
@http.route(‘/test‘, type = ‘json‘, auth = ‘public‘) def test(self): phases = http.request.env[‘project.task.type‘].search([]) list = [] dic = {} for phase in phases: list.append(phase.name) dic[‘phases‘] = list return json.dumps(dic)
注意:project.task.type 这个model需要设置为公开的群组访问控制
- 打开终端:
curl ‘http://localhost:8069/test‘ -H ‘Content-Type: application/json‘ --data "{}"
以上是关于dubbo协议层 jsonrpc协议迁移到http协议的主要内容,如果未能解决你的问题,请参考以下文章