Duboo-入门到学废【下篇】

目录

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】Flink CDC 的概览和使用

Flink CDC 的概览和使用 1.什么是 CDC2.什么是 Flink CDC3.Flink CDC 前生今世3.1 Flink CDC 1.x3.2 Flink CDC 2.x3.3 Flink CDC 3.x 4.Flink CDC 使用5.Debezium 标准 CDC Event 格式详解 1.什么是 CDC CDC(Change Data Capture,数据变更抓取&#xf…

SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1)、Docker网络原理 Docker默认使用的网络模型是bridge,这里只讲bridge网络模型 1)容器之间通信原理 当安装完docker之后,docker会在宿主机上创建一个名叫docker0的网桥,默认IP是172.17.0.1…

家具电子图册制作方法

​随着互联网的普及,越来越多的人选择在线购物,家具行业也不例外。为了满足消费者对高品质家具的需求,家具电子图册应运而生。与传统纸质图册相比,家具电子图册具有更高的转化率、更低的成本和更快的更新速度。 一、与纸质版相比有…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构,称为 Filesystem Hierarchy Standard(文件系统层次结构标准),其定义了不同目录的用途和内容。 浅蓝色文字 /(根目录): /根目录是整个文件系统的起点&…

迁移学习|代码实现

还记得我们之前实现的猫狗分类器吗?在哪里,我们设计了一个网络,这个网络接受一张图片,最后输出这张图片属于猫还是狗。实现分类器的过程比较复杂,准备的数据也比较少。所以我们是否可以使用一种方法,在数据…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)添加 删除 修改 释放

在上篇文章(处理任务队列中的任务)中我们讲解了处理任务队列中的任务的具体流程,eventLoopProcessTask函数的作用: 处理队列中的任务,需要遍历链表并根据type进行对应处理,也就是处理dispatcher中的任务。 // 处理任…

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs,需要安装相关插件 点击插件管理,输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型:如果不填 默认npm …

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目,命名为HelloWorld,点击Finish 选择Empty Ability模板,点击Next Hello World 项目已经成功创建,接来下看看效果 2.预览 Hello World 点击右侧的预…

[VUE]2-vue的基本使用

目录 vue基本使用方式 1、vue 组件 2、文本插值 3、属性绑定 4、事件绑定 5、双向绑定 6、条件渲染 7、axios 8、⭐跨域问题 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅…

RPC基础知识总结

RPC 是什么? RPC(Remote Procedure Call) 即远程过程调用,通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC ? 因为,两个不同的服务器上的服务提供的方法不在一个内存空间,所以&am…

【UML】第17篇 包图

目录 一、什么是包图 二、包图的作用: 三、应用场景: 四、绘图符号的说明: 五、语法: 六、其他要说的 一、什么是包图 包图(Package Diagram)是一种用于描述系统中包和包之间关系的UML图。包是一种将…

Thonny开发ESP32点灯

简介 ESP32是一款功能强大的低功耗微控制器,由乐鑫(Espressif)公司开发。它集成了Wi-Fi和蓝牙功能,适用于各种物联网应用。Thonny是一款基于Python的开源集成开发环境(IDE),专为MicroPython设计…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢? 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据,数据格式为shp,数据坐标为wgs1984地理坐标。数据中不仅包括地铁,也包括轻…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标,都要使用,这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理,非常重要 由于坦克中心点是要严格对齐到一条网格线,并沿着这条线前进的,如果拐弯不做处理&#…

法线变换矩阵的推导

背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…

AI爆文变现:怼量也有技巧!如何提升你的创作收益

做AI爆文项目,赚小钱是没有问题的。 想要赚大钱,就是要做矩阵,怼量。 之前参加训练营的时候,也是要求怼量。 怼量,加高质量文章,让你的收益更高。 如何提升文章质量,减少AI味,AI…

性能优化-OpenMP基础教程(二)

本文主要介绍OpenMP并行编程技术,编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC&am…

动手学深度学习之卷积神经网络之池化层

池化层 卷积层对位置太敏感了,可能一点点变化就会导致输出的变化,这时候就需要池化层了,池化层的主要作用就是缓解卷积层对位置的敏感性 二维最大池化 这里有一个窗口,来滑动,每次我们将窗口中最大的值给拿出来 还是上…

更改ERPNEXT源

更改ERPNEXT源 一, 更改源 针对已经安装了erpnext的,需要更改源的情况: 1, 更改为官方默认源, 进入frapp-bench的目录, 然后执行: bench remote-reset-url frappe //重设frappe的源为官方github地址。 bench remote-reset-url…