Duboo-入门到学废【下篇】
目录
🧂3.超时
??5.多版本
1.dubbo-admin 💕💕💕
1.1dubbo-admin是什么
- 1.duboo-admin是一个基于Dubbo框架的管理平台,用于管理和监控Dubbo服务
- 2.它提供了服务的注册和发现功能,可以查看服务的状态、调用次数、平均耗时等信息,并且支持服务的动态上下线和版本管理
- 3.从注册中心中获取到所有的提供者/消费者进行配置管理
- 4.dubbo-admin 是一个前后端分离的项目。前端使用vue??,后端使用springboot
1.2?dubbo-admin在哪下载
从GitHub上下载dubbo-admin:GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo
?1.3安装
- 1.打开dubbo-admin-server,找到\src\main\resources下面修改application.properties注册中心配置
- 2.在根目录下打开黑窗口 执行 mvn clean package?
?2.序列化?💕💕💕
- dubbo内部已经将序列化和反序列化的过程内部封装了
- 我们只需要在定义pojo类时实现serializable接口即可
- 般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块。
1.创建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;
}
}
?2.创建方法接口
在UserService接口创建查找方法
public User find(int id);
3.实现方法
在UserServiceImpl实现上面方法并重写
@Override
public User find(int id) {
User user=new User(1,"xiaoZhang");
return user;
}
4.调用接口
UserController调用接口方法
/**
*
* 根据id查询用户
* @param id
* @return
*/
@RequestMapping("/find")
public User find(int id){
return userService.find(id);
}
?5.测试
从父工程开始,依次 clean install,并重新tomcat7—run,启动程序
3.超时💕💕💕
问题:
- 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
- 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
?dubbo利用超时机制来解决这个问题,设置一个超对时间,在这个时间段内,无法完成服务访问,则自动断开连接使用timeout属性配置超时时间,默认值1000,单位毫秒。
服务方(Service)
@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;
}
}
?消费方(controller)
@Rerence属性
- timeout:消费方设置延时时间
@RestController
@RequestMapping("/user")
public class UserController {
/**
* 1.从zookeeper(注册中心)获取userService的访问url
* 2.进行远程调用RPC
* 3。将结果封装为代理对象,给变量赋值
*/
@Reference(timeout = 1000)//远程注入
private UserService userService;
}
4.重试?💕💕💕
- 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
- 如果出现网络抖动,则这一次请求就会失败。
- Dubbo提供重试机制来避免类似问题的发生。
- 通过retries属性来设置重试次数。默认为2次。
@Service(timeout = 3000, retries = 2)
public class UserServiceImpl implements UserService {
int i = 1;
}
5.多版本💕💕💕
dubbo中使用versin属性来设置和调用同一个接口的不同版本?
服务端1:?
@Service(version = "v1.0")
public class UserServiceImpl implements UserService {
}
服务端2:?
@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;
}
6.负载均衡💕💕💕
- 1.启动三个服务者,对应不同的端口
- 2.在消费者配置负载均衡策略
- 3.查询AbstractloadBalance
1.random
Random :按权重随机,默认值。按权重设置随机概率。?
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "random")
private UserService userService;
}
2.RoundRobin
RoundRobin:按权重轮询?
public class UserController {
@Reference(loadbalance = "roundrobin")//远程注入
private UserService userService;
}
3.LeastActive
LeastActive:最少活跃调用数,相同活跃数的随?机。
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "leastactive")//远程注入
private UserService userService;
}
?4.ConsistentHash
ConsistentHash:一致性 Hash,相同参数的请求总是发到同一提供者。
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(loadbalance = "consistenthash")//远程注入
private UserService userService;
}
7.集群容错💕💕💕
- 1.启动三个服务者,对应不同的端口
- 2.在消费者配置容错
- 3.查找接口Cluster
1.Failover Cluster
Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用 retries配置。一般用于读操作
@RestController
@RequestMapping("/user")
public class UserController {
@Reference(cluster = "failover")//远程注入
private UserService userService;
}
?2.?Failfast Cluster
?Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于写操作。
3.Failsafe Cluster?
Failsafe Cluster:失败安全,出现异常时,直接忽略。返回一个空结果。
4.Failback Cluster
FailbackCluster:失败自动恢复,后台记录失败请求,定时重发。
5. Forking Cluster
Forking Cluster:并行调用多个服务器,只要一个成功即返回。?
6.Broadcast Cluster?
Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。?
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!