前言
前几年RPC+SOA,这几年服务化,微服务
其实都大同小异,都是概念。dubbo是一款比较成功的开源项目,好多公司都在使用,去哪 京东 当当
但是,dubbo有点太繁琐了,把rpc拆分的很细,利于大家扩展。同时综合了服务治理。
motan,是微博基于dubbo的定制,同时框架接口比较清晰(当然dubbo也很清晰,相对而言)
不熟悉dubbo的同学,请看我之前写的文档 dubbo学习笔记 http://blog.csdn.net/akfly/article/category/6600674
motan
官方文档
通过官方文档可以看出
可以看出与dubbo很类似,之后我们会分析其的几个模块
register
用来和注册中心进行交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能;Server端会在系统初始化时通过register模块注册服务,Client端在系统初始化时会通过register模块订阅到具体提供服务的Server列表,当Server 列表发生变更时也由register模块通知Client。
protocol
用来进行RPC服务的描述和RPC服务的配置管理,这一层还可以添加不同功能的filter用来完成统计、并发限制等功能。serialize
将RPC请求中的参数、结果等对象进行序列化与反序列化,即进行对象与字节流的互相转换;默认使用对java更友好的hessian2进行序列化。、transport
用来进行远程通信,默认使用Netty nio的TCP长链接方式。cluster
Client端使用的模块,cluster是一组可用的Server在逻辑上的封装,包含若干可以提供RPC服务的Server,实际请求时会根据不同的高可用与负载均衡策略选择一个可用的Server发起远程调用。在进行RPC请求时,Client通过代理机制调用cluster模块,cluster根据配置的HA和LoadBalance选出一个可用的Server,通过serialize模块把RPC请求转换为字节流,然后通过transport模块发送到Server端。
代码构建
下载pherialize
motan支持protocol-yar 所以需要这个jar吧,简单的看了下,里面是java如何序列化成php识别的字符串
Example:
List list;
list = new ArrayList();
list.add("A string");
list.add(Integer.valueOf(12345));
list.add(Boolean.TRUE);
System.out.println(Pherialize.serialize(list));
The result is printed to stdout and looks like this:
a:3:{i:0;s:8:"A string";i:1;i:12345;i:2;b:1;}
Now you can use this string in PHP to unserialize it back into a PHP array:
$data = unserialize('a:3:{i:0;s:8:"A string";i:1;i:12345;i:2;b:1;}');
var_dump($data);
Result is a PHP array with exactly the data and types you have added to the array with Java:
array(3) {
[0]=>
string(8) "A string"
[1]=>
int(12345)
[2]=>
bool(true)
}
下载源码
https://github.com/kayahr/pherialize 因为motan使用1.2.1,切换分支,本地build即可
下载motan
https://github.com/weibocom/motan mvn clean install