目录
🧂3.超时
??5.多版本
- 1.duboo-admin是一个基于Dubbo框架的管理平台,用于管理和监控Dubbo服务
- 2.它提供了服务的注册和发现功能,可以查看服务的状态、调用次数、平均耗时等信息,并且支持服务的动态上下线和版本管理
- 3.从注册中心中获取到所有的提供者/消费者进行配置管理
- 4.dubbo-admin 是一个前后端分离的项目。前端使用vue??,后端使用springboot
从GitHub上下载dubbo-admin:GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo
- dubbo内部已经将序列化和反序列化的过程内部封装了
- 我们只需要在定义pojo类时实现serializable接口即可
- 般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块。
创建User对象,并且实现序列化接口
注:一定要实现序列化接口
public class User implements Serializable {
private int id;
private String username;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
}
在UserService接口创建查找方法
public User find(int id);
在UserServiceImpl实现上面方法并重写
@Override
public User find(int id) {
User user=new User(1,"xiaoZhang");
return user;
}
UserController调用接口方法
/**
*
* 根据id查询用户
* @param id
* @return
*/
@RequestMapping("/find")
public User find(int id){
return userService.find(id);
}
从父工程开始,依次 clean install,并重新tomcat7—run,启动程序
问题:
- 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
- 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
?dubbo利用超时机制来解决这个问题,设置一个超对时间,在这个时间段内,无法完成服务访问,则自动断开连接使用timeout属性配置超时时间,默认值1000,单位毫秒。
@Service属性
- timeout:设置超时时间
- reties:设置重试次数
@Service(timeout = 3000,retries = 0)
public class UserServiceImpl implements UserService{
@Override
public String say() {
return "hello xiaoZhang~";
}
@Override
public User find(int id) {
User user=new User(1,"xiaoZhang");
try {
Thread.sleep(5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return user;
}
}
@Rerence属性
- timeout:消费方设置延时时间
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 1.从zookeeper(注册中心)获取userService的访问url
* 2.进行远程调用RPC
* 3。将结果封装为代理对象,给变量赋值
*/
@Reference(timeout = 1000)//远程注入
private UserService userService;
}
- 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
- 如果出现网络抖动,则这一次请求就会失败。
- Dubbo提供重试机制来避免类似问题的发生。
- 通过retries属性来设置重试次数。默认为2次。
@Service(timeout = 3000, retries = 2)
public class UserServiceImpl implements UserService {
int i = 1;
}
dubbo中使用versin属性来设置和调用同一个接口的不同版本?
@Service(version = "v1.0")
public class UserServiceImpl implements UserService {
}
@Service(version = "v2.0")
public class UserServiceImpl2 implements UserService {
}
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 1.从zookeeper(注册中心)获取userService的访问url
* 2.进行远程调用RPC
* 3。将结果封装为代理对象,给变量赋值
*/
@Reference(version = "v2.0")//远程注入
private UserService userService;
}
- 1.启动三个服务者,对应不同的端口
- 2.在消费者配置负载均衡策略
- 3.查询AbstractloadBalance
Random :按权重随机,默认值。按权重设置随机概率。?
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "random")
private UserService userService;
}
RoundRobin:按权重轮询?
public class UserController {
@Reference(loadbalance = "roundrobin")//远程注入
private UserService userService;
}
LeastActive:最少活跃调用数,相同活跃数的随?机。
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "leastactive")//远程注入
private UserService userService;
}
ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "consistenthash")//远程注入
private UserService userService;
}
- 1.启动三个服务者,对应不同的端口
- 2.在消费者配置容错
- 3.查找接口Cluster
Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用 retries配置。一般用于读操作
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(cluster = "failover")//远程注入
private UserService userService;
}
?Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于写操作。
Failsafe Cluster:失败安全,出现异常时,直接忽略。返回一个空结果。
FailbackCluster:失败自动恢复,后台记录失败请求,定时重发。
Forking Cluster:并行调用多个服务器,只要一个成功即返回。?
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。?
?