Motan

motan是新浪开源的一个RPC框架,可以看做是Dubbo的量身裁剪版。

Motan属于服务治理型框架。
RPC框架目前可以划分为两类,一类以Thrift,gRPC为代表的跨语言型,其特点是支持跨语言的RPC调用,通过加一层装换为中间语言,实现跨语言调用,另一类是服务治理型。

相比于Dubbo,Motan在支持相同功能的同时,减少了部分扩展特性.在序列化方式上,Motan只支持Heesian和fastJson,注册中心Motan只支持zookeeper和Consul,底层通信组件只能使用netty,而dubbo还额外支持mina,grizzly,相应的协议,motan也只支持本地调用和motan定义的协议,相比之下dubbo还提供了对redis,thrift,memcache等组件的协议支持,可以使用这些组件完成服务的发布和引用。

motan和dubbo都使用SPI机制保证扩展,所有配置拼接为URL,构造接口代理隐藏远程调用细节,这一点类似基于JMS的远程调用,你需要提供调用接口,方法参数,参数类型,服务端反射接口实现执行返回结果。

接口和实现类的映射dubbo和motan都用一个map来保存。通过请求的接口名找到实现类反射执行方法。

motan的模块设计:
评价一个模块设计的好坏是不同模块之前是否相互依赖,也即模块A中不要出现有类继承模块B的类,即使一定要扩展类,也应该先考虑包装模式,也即是装饰模式,让被扩展的类作为扩展类的一个属性。

Motan_第1张图片

motan提供两种配置方式。

1.注解
2.xml

自定义了类扫描器,可以扫描指定包下的motan定义的注解,在beanpostprocessor阶段通过替换接口属性为构建的接口代理实现对调用过程的隐藏。

xml配置。
在spring下,创建自己的xsd文件并解析只要准备3样东西:

1.META-INF下自定义的xsd
2.META-INF下spring.schemas指明xsd地址,spring.handlers指定NameSpaceSupport实现类地址。
3.NameSpaceSupport实现类和你的BeanDefinitionParser实现类,处理完后会自动将Parse的bean类的实例注入到容器。

motanc客户端的调用流程:
Motan_第2张图片

motan服务端的调用流程:
Motan_第3张图片

性能对比:

我在i5笔记本上测的:
Motan_第4张图片

你可能感兴趣的:(Java)