maven
将接口maven项目install安装,在需要那个接口的地方引入maven
序列化,反序列化
在pojo类上implements Serializable
public class User implements Serializable{}
service层
在service层类上写注解
/**
* 将这个类提供的服务对外发布,将地址,路径注册到注册中心
* 默认(timeout = 1000,retries = 2)
* @Service(当前服务允许3秒超时,重试1次,版本v1.0,当前节点权重为所有机器总权重/100)
*/
@Service(timeout = 3000,retries = 2,version = "v1.0",weight = 100)
public class UserServiceImpl implements UserService{
}
controller层
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 远程注入
* 1.从zookeeper注册中心获取UserService的访问url
* 2.远程RPC调用
* 3.将结果封装为一个代理对象,给变量赋值
* @Reference(允许超时1秒,使用版本为"v2.0"的service)
*/
@Reference(timeout = 1000,version = "v2.0")
private UserService userService;
@RequestMapping("/sayHello")
public String sayHello(){
return userService.sayHello();
}
}
超时&重试
//默认(timeout = 1000,retries = 2)
//@Service(当前服务允许3秒超时,重试2次)
@Service(timeout = 3000,retries = 2)
版本控制
//service版本
@Service(version = "v1.0")
//controller选择哪个版本的service
@Reference(version = "v1.0")
灰度发布
出现新功能时,会让一部分用户先使用新功能,如果用户反馈没有问题的话,再将所有用户都迁移到新的版本上
具体使用, 参考上面的版本控制
负载均衡
//权重为100
@Service(weight = 100)
//负载均衡策略为random
@Reference(loadbalance = "random")
不同机器需要不同端口
<!--服务端口,并非项目端口-->
<dubbo:protocol port="20880" />
<!--1.配置项目名称-->
<dubbo:application name="dubbo-service">
<dubbo:parameter key="qos.port" value="33333"/>
</dubbo:application>
<!--还有tomcat端口-->
集群容错
@Reference(cluster = "failover")
服务降级
//不会在调用service资源, 太暴力
@Reference(mock = "force:return null")
//会失败,之后会返回null, 但是不报错
@Reference(mock = "fill:return null")
一个机器有多个服务, 机器CPU占用太高了, 马上要崩了, 就要让一些不太重要的服务降级, 以保证重要的服务可以正常的运行.