motan系列0——motan的简单使用和配置

  这里我们只介绍motan的注解方式。

1、server端配置

(1)声明Annotation用来指定需要解析的包名

 @Bean
 public AnnotationBean motanAnnotationBean() {
     AnnotationBean motanAnnotationBean = new AnnotationBean();
     motanAnnotationBean.setPackage("com.weibo.motan.demo.server");
     return motanAnnotationBean;
 }

(2)配置ProtocolConfig、RegistryConfig、BasicServiceConfig的bean对象,功能与xml配置中的<motan:protocol ....>、<motan:registry .....>、<motan:basicService ....>标签一致。

 @Bean(name = "demoMotan")
 public ProtocolConfigBean protocolConfig1() {
     ProtocolConfigBean config = new ProtocolConfigBean();
     config.setDefault(true);
     config.setName("motan");
     config.setMaxContentLength(1048576);
     return config;
 }
 
 @Bean(name = "registryConfig1")
 public RegistryConfigBean registryConfig() {
     RegistryConfigBean config = new RegistryConfigBean();
     config.setRegProtocol("local");
     return config;
 }
 
 @Bean
 public BasicServiceConfigBean baseServiceConfig() {
     BasicServiceConfigBean config = new BasicServiceConfigBean();
     config.setExport("demoMotan:8002");
     config.setGroup("testgroup");
     config.setAccessLog(false);
     config.setShareChannel(true);
     config.setModule("motan-demo-rpc");
     config.setApplication("myMotanDemo");
     config.setRegistry("registryConfig1");
     return config;
 }

(3)service的实现类上添加@MotanService注解,注解的配置参数与xml配置方式的<motan:service ....>标签一致。

 @MotanService(export = "demoMotan:8002")
 public class MotanDemoServiceImpl implements MotanDemoService {
 
     public String hello(String name) {
         System.out.println(name);
         return "Hello " + name + "!";
     }
 }

(4)使用spring-boot启动服务

 @EnableAutoConfiguration
 @SpringBootApplication
 public class SpringBootRpcServerDemo {
 
     public static void main(String[] args) {
         System.setProperty("server.port", "8081");
         ConfigurableApplicationContext context =  SpringApplication.run(SpringBootRpcServerDemo.class, args);
 
     MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
         System.out.println("server start...");
     }
 }

  这里为什么要设置一个开关,引用作者在github中的解释:

    motan是通过这个开关控制是否对外提供rpc服务的。
  一般正式环境使用时是需要验证服务正常后才正式对外提供服务的,防止有问题的服务注册到线上。另外在停机的时候,可以先通过开关暂停服务,等没有请求后在进行shutdown。

2、client端的配置

(1)声明Annotation、protocolConfig、RegistryConfig的配置bean。方式与server端配置类似。

(2)配置basicRefererConfig bean

 @Bean(name = "motantestClientBasicConfig")
 public BasicRefererConfigBean baseRefererConfig() {
     BasicRefererConfigBean config = new BasicRefererConfigBean();
     config.setProtocol("demoMotan");
     config.setGroup("motan-demo-rpc");
     config.setModule("motan-demo-rpc");
     config.setApplication("myMotanDemo");
     config.setRegistry("registry");
     config.setCheck(false);
     config.setAccessLog(true);
     config.setRetries(2);
     config.setThrowException(true);
     return config;
 }

(3)在使用motan service 的对象上添加@MotanReferer注解,注册配置与xml方式的<motan:referer ....>标签一致

 @RestController
 public class HelloController {
 
     @MotanReferer(basicReferer = "motantestClientBasicConfig", group = "testgroup", directUrl = "127.0.0.1:8002")
     MotanDemoService service;
 
     @RequestMapping("/")
     @ResponseBody
     public String home() {
         String result = service.hello("test");
         return result;
     }
 }

3、配置说明

  这里只说下<motan:service .../>和<motan:basicService .../>两个(<motan:refer .../>和<motan:basicRefer .../>同理)

  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。

  <motan:basicService .../>

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

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

协议配置列表

<motan:protocol/>

Property nameTypeDefaultComment
name String   服务协议名
serialization String hessian2 序列化方式
payload int   最大请求数据长度
buffer int   缓存区大小
heartbeat int   心跳间隔
transporter String   网络传输方式
threads int   线程池大小
iothreads int availableProcessors+1 IO线程池大小
requestTimeout int 200 请求超时
minClientConnection int 2 client最小连接数
maxClientConnection int 10 client最大连接数
minWorkerThread int 20 最小工作pool线程数
maxWorkerThread int 200 最大工作pool线程数
maxContentLength int 10M 请求响应包的最大长度限制
maxServerConnection int 100000 server支持的最大连接数
poolLifo boolean true 连接池管理方式,是否lifo
lazyInit boolean false 是否延迟init
endpointFactory boolean motan endpoint factory
cluster String default 采用哪种cluster的实现
loadbalance String activeWeight 负载均衡策略
haStrategy String failover 高可用策略
workerQueueSize String 0 Server工作队列大小
acceptConnections int 0 Server可接受连接数
proxy String jdk proxy type, like jdk or javassist
filter String   filter, 多个filter用","分割,blank String 表示采用默认的filter配置
retries int 0 调用失败时重试次数
async boolean false if the request is called async, a taskFuture result will be sent back
queueSize Int   线程池队列大小
accepts Int   最大接收连接数
dispatcher String   信息线程模型派发方式
server String   服务器端实现
client String   客户端端实现
default boolean   是否缺省的配置
switcherService String localSwitcherService  
heartbeatFactory String motan  

注册中心配置列表

<motan:registry/>

Property nameTypeDefaultComment
name String   注册配置名称
regProtocol String   注册协议
address String   注册中心地址
port int 0 注册中心缺省端口
connectTimeout int 1000 注册中心连接超时时间(毫秒)
requestTimeout int 200 注册中心请求超时时间(毫秒)
registrySessionTimeout int 60s 注册中心会话超时时间(毫秒)
registryRetryPeriod int 30s 失败后重试的时间间隔
check boolean true 启动时检查失败后是否仍然启动
register boolean true 在该注册中心上服务是否暴露
subscribe boolean true 在该注册中心上服务是否引用
default boolean   是否缺省的配置

服务端配置列表

<motan:service/>

<motan:basicService/>

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

Property nameTypeDefaultComment
export String   服务暴露的方式,包含协议及端口号,多个协议端口用"," 分隔
basicService     基本service配置
interface Class   服务接口名
ref String   接口实现的类
class String   实现service的类名
host String   如果有多个ip,但只想暴露指定的某个ip,设置该参数
path String   服务路径
serialization String hessian2 序列化方式
extConfig String   扩展配置
proxy String   代理类型
group String default_rpc 服务分组
version String 1.0 版本
throwException String true 抛出异常
requestTimeout String 200 (目前未用)请求超时时间(毫秒)
connectTimeout String 1000 (目前未用)连接超时时间(毫秒)
retries int 0 (目前未用)重试次数
filter String   过滤器配置
listener String   监听器配置
connections int   连接数限制,0表示共享连接,否则为该服务独享连接数;默认共享
application String motan 应用信息
module String motan 模块信息
shareChannel boolean false 是否共享channel
timeout int   方法调用超时时间
actives int 0 最大请求数,0为不做并发限制
async boolean false 方法是否异步
mock String false 设为true,表示使用缺省Mock类名,即:接口名+Mock 后缀,服务接口调用失败Mock实现类
check boolean true 检查服务提供者是否存在
registry String   注册中心的id 列表,多个用“,”分隔,如果为空,则使用所有的配置中心
register boolean true 在该注册中心上服务是否暴露
subscribe boolean true 在该注册中心上服务是否引用
accessLog String false 设为true,将向logger 中输出访问日志
usegz boolean false 是否开启gzip压缩.只有compressMotan的codec才能支持
mingzSize int 1000 开启gzip压缩的阈值.usegz开关开启,且传输数据大于此阈值时,才会进行gzip压缩。只有compressMotan的codec才能支持
codec String motan 协议编码

client配置列表

<motan:referer/>

<motan:basicReferer/>

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

Property nameTypeDefaultComment
id String   服务引用 BeanId
protocol String motan 使用的协议
interface Class   服务接口名
client String   客户端类型
directUrl String   点对点直连服务提供地址
basicReferer String   基本 referer 配置
extConfig String   扩展配置
proxy String   代理类型
group String default_rpc 服务分组
version String 1.0 版本
throwException String true 抛出异常
requestTimeout String 200 请求超时时间(毫秒)
connectTimeout String 1000 连接超时时间(毫秒)
retries int 0 重试次数
filter String   过滤器配置
listener String   监听器配置
connections int   连接数限制,0表示共享连接,否则为该服务独享连接数;默认共享
application String motan 应用信息
module String motan 模块信息
shareChannel boolean false 是否共享channel
timeout int   (目前未用)方法调用超时时间
actives int 0 最大请求数,0为不做并发限制
async boolean false 方法是否异步
mock String false 设为true,表示使用缺省Mock类名,即:接口名+Mock 后缀,服务接口调用失败Mock实现类
check boolean true 检查服务提供者是否存在
registry String   注册中心的id 列表,多个用“,”分隔,如果为空,则使用所有的配置中心
register boolean true 在该注册中心上服务是否暴露
subscribe boolean true 在该注册中心上服务是否引用
accessLog String false 设为true,将向logger 中输出访问日志
usegz boolean false 是否开启gzip压缩.只有compressMotan的codec才能支持
mingzSize int 1000 开启gzip压缩的阈值.usegz开关开启,且传输数据大于此阈值时,才会进行gzip压缩。只有compressMotan的codec才能支持
codec String motan 协议编码

<motan:method/>
需要定义在motan:referer内,用于控制某个函数的行为

 

Property nameTypeDefaultComment
name String   函数名
argumentTypes String   参数类型(逗号分隔), 无参数用void. 如果方法无重载,则可不写
requestTimeout int 200 请求超时时间(毫秒)
connectTimeout int 1000 连接超时时间(毫秒)

  

posted @ 2021-12-27 18:20  jingyi_up  阅读(851)  评论(0编辑  收藏  举报