1 客户端和服务端都需要的
1.1 客户和服务端公共接口
公共接口,实现rpc
public interface FooService {
String hello(String name);
}
1.2 注册策略配置
@Bean(name = "zookeeperRegistry")
public RegistryConfigBean registryConfig() {
RegistryConfigBean config = new RegistryConfigBean();
// 指定协议类型
config.setRegProtocol("zookeeper");
// 注册配置名称,可以随便填写
config.setName("motanZookeeperRegistry");
config.setAddress("127.0.0.1:2181");
config.setConnectTimeout(300000);
config.setRegistrySessionTimeout(30000);
return config;
}
1.3 协议配置
其实是一个应用层协议配置
@Bean(name = "motanProtocol")
public ProtocolConfigBean protocolConfig() {
ProtocolConfigBean config = new ProtocolConfigBean();
config.setDefault(true);
// 这里一定要写motan,是它的协议,否则拿不到默认的Protocal对象
config.setName("motan");
config.setRequestTimeout(20000);
return config;
}
1.4 motan注解扫描配置
主要是扫描@MotanReferer 和 @MotanService注解
@Bean
public AnnotationBean motanAnnotationBean() {
AnnotationBean motanAnnotationBean = new AnnotationBean();
motanAnnotationBean.setPackage("com.lala.test");
return motanAnnotationBean;
}
2 服务端
2.1 服务端配置
@Bean("basicService")
public BasicServiceConfigBean baseServiceConfig() {
BasicServiceConfigBean config = new BasicServiceConfigBean();
// 协议名称:端口,协议就是motanProtocol Bean配置对象
config.setExport("motanProtocol:8002");
config.setAccessLog(false);
config.setShareChannel(true);
// 注册中心策略对象
config.setRegistry("zookeeperRegistry");
return config;
}
2.2 服务端提供服务
@MotanService(basicService = "basicService", group = "testgroup")
public class FooServiceImpl implements FooService {
@Override
public String hello(String name) {
return "hello " + name;
}
}
3 客户端
3.1 客户端配置
@Bean(name = "motantestClientBasicConfig")
public BasicRefererConfigBean baseRefererConfig() {
BasicRefererConfigBean config = new BasicRefererConfigBean();
// 协议配置对象 Bean name
config.setProtocol("motanProtocol");
// 注册策略
config.setRegistry("zookeeperRegistry");
config.setRequestTimeout(20000);
config.setCheck(false);
config.setAccessLog(true);
config.setRetries(2);
config.setThrowException(true);
return config;
}
3.2 客户端远程调用
@MotanReferer(basicReferer = "motantestClientBasicConfig", group = "testgroup")
private FooService fooService;
@RequestMapping("/name")
ResponseEntity foo(@RequestParam("name") String name){
String res = fooService.hello(name);
return new ResponseEntity<>(res, HttpStatus.OK);
}