Dubbo学习笔记

集群与分布式概念

image-20231011152301603

dubbo服务架构

image-20231012095823723

SpringBoot整合Zookeeper

Dubbo高级特性

序列化

pojo对象必须实现serializable接口才能进行消费者和生产者数据传递

1
2
3
4
public class User implement serializable{
private String name;
private Long password;
}

地址缓存

当注册中心挂掉之后,服务调用者不会因为这个原因而无法远程调用方法:

因为当第一次远程调用时,他虽然会从注册中心获取方法地址,但是也会保存此地址于本机缓存中,所以下次调用不需要经过注册中心

超时与重试

1
2
3
4
5
6
@DubboService(timeout = 3000,retries = 2)//超时时间3秒,重试两次,一共执行三次
public class UserServiceImpl implement UserService{
public User finUser(String name){
return new User(name,"123456")
}
}

多版本

通过指定版本注入;降低代码耦合,提高可扩展性。

1
2
3
4
5
6
7
8
9
10
11
12
@DubboService(version = "1.0")//超时时间3秒,重试两次,一共执行三次
public class UserServiceImpl implement UserService{
public User finUser(String name){
return new User(name,"123456")
}
}
@DubboService(version = "2.0")//超时时间3秒,重试两次,一共执行三次
public class UserServiceImpl2 implement UserService{
public User finUser(String name){
return new User(name,"123456")
}
}
1
2
@Reference(version = "1.0")
UserService userService;

负载均衡

image-20231014143228335

使用方式

1
2
@Reference(loadbalance = "random")//远程注入userService,并选择负载均衡模式
private UserService userService;

集群容错

调用服务出错重试

image-20231014150845237

1
2
@Reference(cluster = "failover")//选择集群容错模式
private UserService userService;

服务降级

image-20231014151502689

image-20231014151349809

1
2
@Reference(mock = "force:return null")//设置为降级服务
private UserService userService;