Duboo-入门到学废【下篇】

2024-01-07 19:36:22

目录

🥓1.dubbo-admin?

?🌭2.序列化?

🧂3.超时

🥚4.重试?

??5.多版本

🧇6.负载均衡

🍟7.集群容错


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:广播调用所有提供者,逐个调用,任意一台报错则报错。?

?

文章来源:https://blog.csdn.net/dfdg345/article/details/134983193
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。