再探motan

原文章:http://www.10qianwan.com/articledetail/219355.html

motan主要有3部分组成:registry,server和client。其中我们的registry用的是consul。下面就这3个部分一个一个的说明:

1、pom.xml 添加motan依赖:

    一般来说,在公共模块的pom文件里添加依赖就可以了,比如在server、client、dao和common的sna编程模型下,只要在common的pom文件中添加依赖即可

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

1 <dependency>

 2      <groupid>com.weibo</groupid>

 3      <artifactid>motan-core</artifactid>

 4      <version>release</version>

 5  </dependency>

 6  <dependency>

 7      <groupid>com.weibo</groupid>

 8      <artifactid>motan-transport-netty</artifactid>

 9      <version>release</version>

10  </dependency>

11 

12  <!-- only needed for spring-based features -->

13  <dependency>

14      <groupid>com.weibo</groupid>

15      <artifactid>motan-springsupport</artifactid>

16      <version>release</version>

17  </dependency>

18  <dependency>

19      <groupid>org.springframework</groupid>

20      <artifactid>spring-context</artifactid>

21      <version>4.2.4.release</version>

22  </dependency>

2、配置motan

motan框架中将功能模块抽象为四个可配置的元素,分别为:

  • protocol:服务通信协议。服务提供方与消费方进行远程调用的协议,默认为motan协议,使用hessian2进行序列化,netty作为endpoint以及使用motan自定义的协议编码方式。

  • registry:注册中心。服务提供方将服务信息(包含ip、端口、服务策略等信息)注册到注册中心,服务消费方通过注册中心发现服务。当服务发生变更,注册中心负责通知各个消费方。

  • service:服务提供方提供的服务。使用方将核心业务抽取出来,作为独立的服务。通过暴露服务并将服务注册至注册中心,从而使调用方调用。

  • referer:服务消费方对服务的引用,即服务调用方。

       一般来说,在server端需要配置registry、protocol和service;在client端需要配置registry、protocol和referer。

motan推荐使用spring配置rpc服务,目前motan扩展了6个自定义spring xml标签:

  • motan:protocol
  • motan:registry
  • motan:basicservice
  • motan:service
  • motan:basicreferer
  • motan:referer

详细配置:

<motan:registry/>

  注册中心配置。用于配置注册中心的注册协议、地址端口、超时时间等。motan:registry包含以下常用属性:

    • name:标识配置名称
    • regprotocol:标识注册中心协议
    • address:标识注册中心地址

  motan支持使用多种registry模块,使用不同注册中心需要依赖对应jar包。

  以consul为注册中心举例:

1

<motan:registry  regprotocol="consul" <br>          name="my_consul" <br>          address="${my.consul.address}"/><br>

  下表是registry的所有属性说明:

property nametypedefaultcomment
namestring 注册配置名称
regprotocolstring 注册协议
addressstring 注册中心地址
portint0注册中心缺省端口
connecttimeoutint1000注册中心连接超时时间(毫秒)
requesttimeoutint200注册中心请求超时时间(毫秒)
registrysessiontimeoutint60s注册中心会话超时时间(毫秒)
registryretryperiodint30s失败后重试的时间间隔
checkbooleantrue启动时检查失败后是否仍然启动
registerbooleantrue在该注册中心上服务是否暴露
subscribebooleantrue在该注册中心上服务是否引用
defaultboolean 是否缺省的配置

 

 

 

 

 

 

 

 

 

 

 

 

 

<motan:service/> 和 <motan:basicservice/>

1

protocol、basic service、extconfig、service中定义相同属性时,优先级为service > extconfig > basic service > protocol

  <motan:service .../>

  motan:service包含以下常用属性:

    • interface:标识服务的接口类名
    • ref:标识服务的实现类,引用具体的spring业务实现对象
    • export:标识服务的暴露方式,格式为“protocolid:port”(使用的协议及对外提供的端口号),其中protocolid:应与motan:protocol中的id一致
    • group:标识服务的分组
    • module:标识模块信息
    • basicservice:标识使用的基本配置,引用motan:basicservice对象

  motan在注册中心的服务是以group的形式保存的,一般推荐一个分组以机房+业务线进行命名,如yf-user-rpc。一个分组中包含若干的service,一个service即是java中的一个接口类名,每个service下有一组能够提供对应服务的server。

1

<motan:basicservice .../><br>

  rpc服务的通用配置,用于配置所有服务接口的公共配置,减少配置冗余。basicservice包含以下常用属性:

    • id:标识配置项
    • export:标识服务的暴露方式,格式为“protocolid:port”(使用的协议及对外提供的端口号),其中protocolid:应与motan:protocol中的id一致
    • group:标识服务的分组
    • module:标识模块信息
    • registry:标识service使用的注册中心,与motan:registry中的name对应

  motan:service可以通过以下方式引用基本配置。

1

2

3

4

<!-- 通用配置,多个rpc服务使用相同的基础配置. group和module定义具体的服务池。export格式为“protocol id:提供服务的端口” -->

<motan:basicservice id="servicebasicconfig" export="demomotan:8002" group="motan-demo-rpc" module="motan-demo-rpc" registry="registry"/>

<!-- 通用配置,多个rpc服务使用相同的基础配置. group和module定义具体的服务池。export格式为“protocol id:提供服务的端口” -->

<motan:service interface="com.weibo.motan.demo.service.motandemoservice" ref="demoserviceimpl" basicservice="servicebasicconfig"/>

 

motan:service中的basicservice属性用来标识引用哪个motan:basicservice对象,对于basicservice中已定义的内容,service不必重复配置。

下表是service的所有属性说明:

property nametypedefaultcomment
exportstring 服务暴露的方式,包含协议及端口号,多个协议端口用"," 分隔
basicservice  基本service配置
interfaceclass 服务接口名
refstring 接口实现的类
classstring 实现service的类名
hoststring 如果有多个ip,但只想暴露指定的某个ip,设置该参数
pathstring 服务路径
serializationstringhessian2序列化方式
extconfigstring 扩展配置
proxystring 代理类型
groupstringdefault_rpc服务分组
versionstring1.0版本
throwexceptionstringtrue抛出异常
requesttimeoutstring200(目前未用)请求超时时间(毫秒)
connecttimeoutstring1000(目前未用)连接超时时间(毫秒)
retriesint0(目前未用)重试次数
filterstring 过滤器配置
listenerstring 监听器配置
connectionsint 连接数限制,0表示共享连接,否则为该服务独享连接数;默认共享
applicationstringmotan应用信息
modulestringmotan模块信息
sharechannelbooleanfalse是否共享channel
timeoutint 方法调用超时时间
activesint0最大请求数,0为不做并发限制
asyncbooleanfalse方法是否异步
mockstringfalse设为true,表示使用缺省mock类名,即:接口名+mock 后缀,服务接口调用失败mock实现类
checkbooleantrue检查服务提供者是否存在
registrystring 注册中心的id 列表,多个用“,”分隔,如果为空,则使用所有的配置中心
registerbooleantrue在该注册中心上服务是否暴露
subscribebooleantrue在该注册中心上服务是否引用
accesslogstringfalse设为true,将向logger 中输出访问日志
usegzbooleanfalse是否开启gzip压缩.只有compressmotan的codec才能支持
mingzsizeint1000开启gzip压缩的阈值.usegz开关开启,且传输数据大于此阈值时,才会进行gzip压缩。只有compressmotan的codec才能支持
codecstringmotan协议编码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<motan:referer/>和<motan:basicreferer/>

1

protocol、basic referer、extconfig、referer中定义相同属性时,优先级为referer > extconfig > basic referer > protocol

<motan:referer/>

调用方对象,motan:referer包含以下常用属性:

  • id:标识配置项
  • group:标识服务的分组
  • module:标识模块信息
  • protocol:标识referer使用的协议,与motan:protocol中的name对应,默认为motan协议
  • registry:标识referer使用的注册中心,与motan:registry中的name对应
  • basicreferer:标识使用的基本配置,引用motan:basicreferer对象

client端订阅service后,会从registry中得到能够提供对应service的一组server,client把这一组server看作一个提供服务的cluster。当cluster中的server发生变更时,client端的register模块会通知client进行更新。

<motan:basicreferer/>

调用方基础配置。用于配置所有服务代理的公共属性。

  • id:标识配置项
  • group:标识服务的分组
  • module:标识模块信息
  • protocol:标识referer使用的协议,与motan:protocol中的name对应,默认为motan协议
  • registry:标识referer使用的注册中心,与motan:registry中的name对应

motan:referer可以通过以下方式引用基本配置。

1

2

3

4

5

<!-- 通用referer基础配置 -->

<motan:basicreferer id="clientbasicconfig" group="motan-demo-rpc" module="motan-demo-rpc"  registry="registry" protocol="motan"/>

 

<!-- 具体referer配置。使用方通过beanid使用服务接口类 -->

<motan:referer id="demoreferer" interface="com.weibo.motan.demo.service.motandemoservice"  basicreferer="clientbasicconfig"/>

 

motan:referer中的basicservice属性用来标识引用哪个motan:basicreferer对象,对于basicreferer中已定义的内容,service不必重复配置。

下表是referer的所有属性说明:

property nametypedefaultcomment
idstring 服务引用 beanid
protocolstringmotan使用的协议
interfaceclass 服务接口名
clientstring 客户端类型
directurlstring 点对点直连服务提供地址
basicrefererstring 基本 referer 配置
extconfigstring 扩展配置
proxystring 代理类型
groupstringdefault_rpc服务分组
versionstring1.0版本
throwexceptionstringtrue抛出异常
requesttimeoutstring200请求超时时间(毫秒)
connecttimeoutstring1000连接超时时间(毫秒)
retriesint0重试次数
filterstring 过滤器配置
listenerstring 监听器配置
connectionsint 连接数限制,0表示共享连接,否则为该服务独享连接数;默认共享
applicationstringmotan应用信息
modulestringmotan模块信息
sharechannelbooleanfalse是否共享channel
timeoutint (目前未用)方法调用超时时间
activesint0最大请求数,0为不做并发限制
asyncbooleanfalse方法是否异步
mockstringfalse设为true,表示使用缺省mock类名,即:接口名+mock 后缀,服务接口调用失败mock实现类
checkbooleantrue检查服务提供者是否存在
registrystring 注册中心的id 列表,多个用“,”分隔,如果为空,则使用所有的配置中心
registerbooleantrue在该注册中心上服务是否暴露
subscribebooleantrue在该注册中心上服务是否引用
accesslogstringfalse设为true,将向logger 中输出访问日志
usegzbooleanfalse是否开启gzip压缩.只有compressmotan的codec才能支持
mingzsizeint1000开启gzip压缩的阈值.usegz开关开启,且传输数据大于此阈值时,才会进行gzip压缩。只有compressmotan的codec才能支持
codecstringmotan协议编码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值