现在在项目中已经应用了spring-boot,其有很多starter方便使用,因此打算写一个motan的starter,用起来更像spring-boot的风格。另一个是官方的例子还不是很完善,后续可能会修改吧。
- 首先参照官方demo并与xml配置做下对照
- 需要一个返回类型为AnnotationBean的bean定义,这个用来扫描包来解析motan的注解进行暴露服务或引用服务
- 需要一个返回类型为RegistryConfigBean的bean定义,这个是注册中心配置bean,对应xml配置:
<motan:registry />
- 需要一个返回类型为BasicServiceConfigBean的bean定义,这个是RPC基础服务配置,可以避免每个服务暴露时都要配置相同的属性,由它统一配置好,服务暴露或引用时,直接使用这个配置即可,对应xml配置:
<motan:basicService />
- 需要一个返回类型为ProtocolConfigBean的bean定义,这个是协议配置bean,对应xml配置:
<motan:protocol />
- 对于客户端需要一个返回类型为BasicRefererConfigBean的bean定义,对应xml配置:
<motan:basicReferer/>
- 官方例子配置数据直接写在类里,下面利用spring-boot配置特性修改这部分代码
- 建立对应上面的4个配置类BasicRefererConfigProperties、
BasicServiceConfigProperties、ProtocolConfigProperties、
RegistryConfigProperties用于对应配置文件的配置属性 - 建立5个bean,其中4个对应上的4个配置类,用于设置属性,另一个是AnnotationBean用于扫描的配置
- 增加注册中心的心跳配置
// 非local配置时,才去配置
if (!registryConfig.getRegProtocol().toLowerCase().equals("local")) {
MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
}
- 增加对BasicServiceConfigBean的条件配置,避免客户端调用时也会创建该bean,对于BasicRefererConfigBean不做限制
目前大概实现这些,还有一些属性不全,Motan官方的配置文档中有些属性已经不能使用,估计是对之前的版本兼容
具体代码参考github
使用的方法参照demo
主要是:
- 引入pom
<dependency>
<groupId>com.github.chenxing2.motan</groupId>
<artifactId>spring-boot-starter-motan</artifactId>
<version>0.1</version>
</dependency>
- 服务器端配置
# Motan Aonnotation config
motan.annotation.package=com.github.chenxing2.demo.server
# Motan Registry config
#
# 不使用注册中心
motan.registry.regProtocol=local
#
# 使用注册中心,zookeeper
#motan.registry.regProtocol=zookeeper
#motan.registry.address=127.0.0.1:2181
#motan.registry.connectTimeout=2000
#
# Motan Protocol config
# Motan BasicService config
motan.basicservice.application=demo
motan.basicservice.exportPort=8888
motan.basicservice.accessLog=false
motan.basicservice.shareChannel=true
- 客户端配置
# Motan Aonnotation config
motan.annotation.package=com.github.chenxing2.demo.client
# Motan Registry config
#
# 不使用注册中心,这里配置为 direct,而不是local
motan.registry.regProtocol=direct
motan.registry.address=localhost:8888
#
# 使用注册中心,zookeeper
#motan.registry.regProtocol=zookeeper
#motan.registry.address=127.0.0.1:2181
#motan.registry.connectTimeout=2000
#
# Motan Protocol config
# Motan BasicService config
motan.basicreferer.application=demo
motan.basicreferer.accessLog=false
motan.basicreferer.retries=3
motan.basicreferer.throwException=true