Dubbo 框架学习笔记七
Dubbo 框架学习跨语言实现:HTTP 协议 + JSON-RPC。
目前互联网的技术栈百花齐放,很多公司会使用 Node.js、Python、Go 等语言来开发 一些 Web 端应用,同时又有很多服务会使用 Java 技术栈实现,这就出现了大量的跨语言调用的需求。Dubbo 作为一个 RPC 框架,自然也希望能实现这种跨语言的调用,目前 Dubbo 中使用“HTTP 协议 + JSON-RPC”的方式来达到这一目的,其中 HTTP 协议和 JSON 都是天然跨语言的标准,在各种语言中都有成熟的类库。
JSON-RPC
JSON-RPC 是基于 JSON 的跨语言远程调用协议。Dubbo 中的 dubbo-rpc-xml、dubbo-rpc-webservice 等模块支持的 XML-RPC、WebService 等协议与 JSON-RPC 一样,都是基于文本的协议,只不过 JSON 的格式比 XML、WebService 等格式更加简洁、紧凑。与 Dubbo 协议、Hessian 协议等二进制协议相比,JSON-RPC 更便于调试和实现,可见 JSON-RPC 协议还是一款非常优秀的远程调用协议。
在 Java 体系中,有很多成熟的 JSON-RPC 框架,例如 jsonrpc4j、jpoxy 等,其中,jsonrpc4j 本身体积小巧,使用方便,既可以独立使用,也可以与 Spring 无缝集合,非常适合基于 Spring 的项目。
JSON-RPC 协议中请求的基本格式:
{
"id":1,
"method":"getInfo",
"params":[]
}
JSON-RPC 请求中各个字段的含义:
id 字段,用于唯一标识一次远程调用。
method 字段,指定了调用的方法名。
params 数组,表示方法传入的参数,如果方法无参数传入,则传入空数组。
在 JSON-RPC 的服务端收到调用请求之后,会查找到相应的方法并进行调用,然后将方法的返回值整理成如下格式,返回给客户端:
{
"id":1,
"result":"Dubbo json-rpc",
"error":null
}
JSON-RPC 响应中各个字段的含义:
id 字段,用于唯一标识一次远程调用,该值与请求中的 id 字段值保持一致。
result 字段,记录了方法的返回值,若无返回值,则返回空;若调用错误,返回 null。
error 字段,表示调用发生异常时的异常信息,方法执行无异常时该字段为 null。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/c0be8f1761bb4a34c3b582c83】。文章转载请联系作者。
评论