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笔记本上测的:
这里写图片描述

### Motan 标签使用方法与配置示例 Motan 是由微博开源的一款高性能 RPC 框架,支持多种服务治理功能。以下是关于 Motan 的标签使用方法以及配置示例。 #### 1. 基本概念 Motan 提供了一套基于 XML 和注解的配置方式来定义服务提供者和服务消费者。XML 中的核心标签包括 `<motan:application>`、`<motan:registry>`、`<motan:protocol>` 等[^2]。 #### 2. 配置文件结构 以下是一个典型的 Motan XML 配置文件结构: ```xml <motan:config> <!-- 定义应用名称 --> <motan:application name="demoApplication"/> <!-- 注册中心配置 --> <motan:registry regProtocol="zookeeper" address="localhost:2181"/> <!-- 协议配置 --> <motan:protocol name="motan" port="8080"/> </motan:config> ``` 上述代码片段展示了如何通过 XML 文件设置 Motan 应用的基本属性,包括注册中心地址和协议端口等参数[^3]。 #### 3. 服务提供者的配置 对于服务提供方,可以通过如下方式进行配置: ```xml <!-- 定义服务接口实现类 --> <motan:service interface="com.example.DemoService" impl="com.example.impl.DemoServiceImpl" export="true"> </motan:service> ``` 此部分指定了服务的具体实现类 `DemoServiceImpl` 并将其暴露给外部调用[^4]。 #### 4. 服务消费者的配置 而对于消费方,则可以按照下面的方式完成初始化工作: ```xml <!-- 引入远程服务 --> <motan:reference id="demoService" interface="com.example.DemoService" check="false"> </motan:reference> ``` 这里设置了引用的服务 ID 及其对应的接口名,并允许忽略连接失败的情况(即 `check=false`)[^5]。 #### 5. 动态调整选项 除了静态配置外,还可以利用一些动态特性来自适应不同的运行环境需求。例如,在高并发场景下可能需要增加线程池大小或者超时时间等参数调节策略[^6]: ```xml <motan:method name="*" retries="3" timeout="3000"/> ``` 以上例子表示全局范围内所有方法都将拥有三次重试机会并且单次请求最长等待时间为三秒。 #### 总结 综上所述,Motan 不仅提供了灵活易用的 API 接口设计模式,同时也具备强大的扩展能力满足实际开发中的多样化诉求。开发者可以根据项目具体情况选用合适的工具链组合从而达到最佳性能表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值