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.注解
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服务端的调用流程:
这里写图片描述

性能对比:

我在i5笔记本上测的:
这里写图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Exception caught when during method invocation. request:net.risesoft.rpc.itemAdmin.DocumentManager.edit4Position(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String) requestId=1771270236171928205 java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.weibo.api.motan.rpc.DefaultProvider.invoke(DefaultProvider.java:64) at com.weibo.api.motan.rpc.AbstractProvider.call(AbstractProvider.java:52) at com.weibo.api.motan.transport.ProviderMessageRouter.call(ProviderMessageRouter.java:98) at com.weibo.api.motan.transport.ProviderProtectedMessageRouter.call(ProviderProtectedMessageRouter.java:75) at com.weibo.api.motan.transport.ProviderMessageRouter.handle(ProviderMessageRouter.java:93) at com.weibo.api.motan.transport.support.DefaultRpcHeartbeatFactory$HeartMessageHandleWrapper.handle(DefaultRpcHeartbeatFactory.java:98) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.processRequest(NettyChannelHandler.java:155) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.processMessage(NettyChannelHandler.java:133) at com.weibo.api.motan.transport.netty4.NettyChannelHandler.access$000(NettyChannelHandler.java:32) at com.weibo.api.motan.transport.netty4.NettyChannelHandler$1.run(NettyChannelHandler.java:73) at java.util.concurrent.ThreadPoolExecutor.runWorker(Threa是哪里的问题
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值