dubbo 重试、 多版本 、负载均衡

本文详细介绍了Dubbo的服务治理特性,包括超时重试机制,通过`retries`属性设置重试次数以应对网络抖动。此外,讲解了多版本控制,利用`version`属性实现灰度发布。负载均衡策略如Random、RoundRobin、LeastActive和ConsistentHash也被阐述,其中Random按权重随机分配,LeastActive优先分配给活跃调用少的提供者,ConsistentHash确保相同参数请求始终发送给同一提供者。Dubbo通过这些策略确保服务的稳定性和高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dubbo 重试、 多版本 、负载均衡

重试

  1. 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  2. 如果出现网络抖动,则这一-次请求就会失败。
  3. Dubbo提供重试机制来避免类似问题的发生。
  4. 通过retries属性来设置重试次数。默认为2次
//timeout 超时时间 单位毫秒  retries 设置重试次数
@Service(timeout = 3000,retries=0)
//@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
@Service(timeout = 3000,retries = 2)//当前服务3秒超时,重试2次,一共3次
public class UserServiceImpl implements UserService {

    int i = 1;
    public String sayHello() {
        return "hello dubbo hello!~";
    }


    public User findUserById(int id) {
        System.out.println("服务被调用了:"+i++);
        //查询User对象
        User user = new User(1,"zhangsan","123");
        //数据库查询很慢,查了5秒

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return user;
    }
}

多版本

**灰度发布:**当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。

dubbo中使用version属性来设置和调用同一个接口的不同版本

生产者配置
这是指定 版本号

@Service(version="v2.0")
public class UserServiceImp12 implements UserService {...}

消费者配置
这是指定 使用的是什么版本

@Reference(version = "v2.0")//远程注入
private UserService userService;

负载均衡

负载均衡策略(4种) :
**Random:**按权重随机,默认值。按权重设置随机概率。

RoundRobin: 按权重轮询。

LeastActive: 最少活跃调用数,相同活跃数的随机。

**ConsistentHash:**一 致性Hash,相同参数的请求总是发到同一提供者。

为何要用负载均衡

作为服务提供者,只用一台机器运作,效率低,一旦发生故障就全盘崩溃。因此要用多台机器作为服务提供者。当有机器发生故障时,还能用其他的来运转。不至于一下子全盘崩掉。为了使这些机器接受到从服务消费者过来的请求,能在这些机器均衡分配,这样使得提供者的负但的处理量相当,不至于某台机器处理70-80%的请求,有的机子却在空闲中。这会造成某台机子的负担过大而崩溃。

负载均衡 其实就是平均分配服务器 处理请求的数量,控制处理的顺序,使机子之间的负担均衡。防止应负担过大而崩溃。

**Random:**按权重随机,默认值。按权重设置随机概率。

@Service(weight = 100)

weight 权重的意思,在注解中设置权重属性值,来控制负载均衡的分配。值越大分配到的几率就会大些。
权重可以设置在类注解里,也可以设置在自动注入的注解里。

举列:


//@Service//将该类的对象创建出来,放到Spring的IOC容器中  bean定义
//将这个类提供的方法(服务)对外发布。将访问的地址 ip,端口,路径注册到注册中心中
@Service(weight = 100)
public class UserServiceImpl implements UserService {

    public String sayHello() {
        return "3......";
    }
    ```
spring配置文件

```xml
	<dubbo:protocol port="20883" />
	<!--dubbo的配置-->
	<!--1.配置项目的名称,唯一-->
	<dubbo:application name="dubbo-service">
		<dubbo:parameter key="qos.port" value="55555"/>
	</dubbo:application>
	<!--2.配置注册中心的地址-->
	<dubbo:registry address="zookeeper://192.168.149.135:2181"/>
	<!--3.配置dubbo包扫描-->
	<dubbo:annotation package="com.itheima.service.impl" />



	<!-- 元数据配置 -->
	<dubbo:metadata-report address="zookeeper://192.168.149.135:2181" />

在服务消费者里,也就是 controller层中
在 @Reference 远程注入注解的属性里
使用 loadbalance 属性 他的意思是:负载均衡
来指定 负载均衡策略

@RestController
@RequestMapping("/user")
public class UserController {

    //注入Service
    //@Autowired//本地注入

    /*
        1. 从zookeeper注册中心获取userService的访问url
        2. 进行远程调用RPC
        3. 将结果封装为一个代理对象。给变量赋值

     */

    @Reference(loadbalance = "random")//远程注入
    private UserService userService;

RoundRobin: 按权重轮询。
就是 看 weight = 100的值,值较大的,在第一遍按顺序分配后,从第二遍开始 从值最大的机子开始 向值小的 降序分配。

LeastActive: 最少活跃调用数,相同活跃数的随机。
就是优先分配给处理速度快的机子处理,遇到速度相同的按随机分配。

**ConsistentHash:**一 致性Hash,相同参数的请求总是发到同一提供者。
这是将,从消费者过来的请求,第一次是分配给由谁处理的,以后都由谁来处理这个消费者的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普希托夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值