Dubbo 4 Dubbo 高级特性 4.2 Dubbo 常用高级配置 4.2.4 重试 4.2.5 多版本

news2024/11/17 14:40:46

Dubbo

【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】

4 Dubbo 高级特性

文章目录

      • Dubbo
      • 4 Dubbo 高级特性
        • 4.2 Dubbo 常用高级配置
          • 4.2.4 重试
          • 4.2.5 多版本

4.2 Dubbo 常用高级配置

4.2.4 重试

之前我们已经完成 了超时的配置

在这里插入图片描述

而且知道 了如果服务提供方 和消费方 都配置 了超时时间的话, 消费方 会覆盖 提供方。

下面来说说 重试的机制

在这里插入图片描述

  • 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。

  • 如果出现网络抖动,则这一次请求就会失败。

  • Dubbo 提供重试机制来避免类似问题的发生。

  • 通过 retries 属性来设置重试次数。默认为 2 次。

    在这里插入图片描述

【试试】

修改提供方 的实现类

在这里插入图片描述

重试 两次,

重启服务 ,测试

在这里插入图片描述

没毛病,它就是 被调用 了三次 【原本1 次 + 重试 2 次】

4.2.5 多版本

【举个栗子】

在这里插入图片描述

现在 有一个服务提供者D 和三个 服务消费者A、B、C

他们仨 都要去调用 服务提供者

这个时候D 服务可能会出现 升级的情况

在这里插入图片描述

现在 它升级 成了 2.0 ,而且我们将 这个 升级后的服务部署在 了E 的服务器上

现在要做的 就是把A、B、C 都转到 E 吗?

一般不会这样 做

在这里插入图片描述

我们 会先让少量 的服务 消费者先去 “体验一下”

等C 使用完,没有问题 后

在这里插入图片描述

再让 A、B 转过来

这样的操作, 我们 一般称之为 “灰度发布 ”

  • 灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能。
  • dubbo 中使用version 属性来设置和调用同一个接口的不同版本

【试试】

现在 新加 一个实现类,直接复制一个

在这里插入图片描述

OK,2 作为 新版

给老版本 来个v1.0

在这里插入图片描述

然后让 它调用的时候,输出 一句话

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.pojo.User;
import com.dingjiaxiong.service.UserService;
import org.apache.dubbo.config.annotation.Service;

/**
 * ClassName: UserServiceImpl
 * date: 2022/11/13 20:27
 *
 * @author DingJiaxiong
 */

//@Service

@Service(version = "v1.0") // 将这个类提供的方法【服务】对外发布,将访问的地址ip、端口、路径注册到 注册中心 中
public class UserServiceImpl implements UserService {
    public String sayHello() {
        return "Hello , Dubbo! DingJiaxiong";
    }


    public User findUserById(int id) {

        System.out.println("我是v1.0 版本 old..." );

        // 查询User 对象【这里躲懒了,不走数据库】
        User user = new User(1, "zhangsan", "123");

        return user;
    }
}

OK

再改下新版本,即 第二个 实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.pojo.User;
import com.dingjiaxiong.service.UserService;
import org.apache.dubbo.config.annotation.Service;

/**
 * ClassName: UserServiceImpl
 * date: 2022/11/13 20:27
 *
 * @author DingJiaxiong
 */

//@Service

@Service(version = "v2.0") // 将这个类提供的方法【服务】对外发布,将访问的地址ip、端口、路径注册到 注册中心 中
public class UserServiceImpl2 implements UserService {
    public String sayHello() {
        return "Hello , Dubbo! DingJiaxiong";
    }


    public User findUserById(int id) {

        System.out.println("你正在使用新版本 v2.0: new ...");

        // 查询User 对象【这里躲懒了,不走数据库】
        User user = new User(1, "zhangsan", "123");

        return user;
    }
}

现在 在控制器里面 ,调用的时候 也可以指定调用的版本

package com.dingjiaxiong.controller;

import com.dingjiaxiong.pojo.User;
import com.dingjiaxiong.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * ClassName: UserController
 * date: 2022/11/13 20:39
 *
 * @author DingJiaxiong
 */

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

    //注入 Service
//    @Autowired  //这个是本地 注入
    @Reference(version = "v1.0")
    private UserService userService;

    @RequestMapping("/sayHello")
    public String sayHello(){

        return userService.sayHello();
    }
    
    // 根据ID 查询用户信息
    @RequestMapping("/find")
    public User find(int id){
        
        return userService.findUserById(id);
    }

}

OK,重启两个 服务

在这里插入图片描述

OK,测试调用

在这里插入图片描述

没有问题,换成 2.0 并重启web 服务

在这里插入图片描述

没毛病【这就是 多版本】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 中存在太多的垃圾文件?

不知道大家是否也跟我一样,是一只要把的自己电脑文件安排的条理有序,把没用的文件会及时删掉的程序猿呢?如果是的话,那么我们可以愉快地探讨下文章的内容。如果不是的话,你也可以留下来凑凑热闹嘛(>- 下面要介绍的是…

基于java+springmvc+mybatis+vue+mysql的邮票鉴赏系统及实现

项目介绍 随着邮票行业的发展,邮票市场已经有了越来越多的爱好者加入。收藏邮票,也就成了邮票收藏爱好者一个有爱又恨的话题。没错,大量的邮票收藏确实是对知识面的增广和一种成就感的满足。但是面对越来越多的邮票。五花八门各种各样的邮票…

十四、CANdelaStudio入门-DID池

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的DID池,欢迎各位朋友订阅、评论,可以提…

【C++进阶】C++11新特性上篇(万字详解)

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

Dubbo 4 Dubbo 高级特性 4.2 Dubbo 常用高级配置 4.2.6 负载均衡

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.2 Dubbo 常用高级配置4.2.6 负载均衡4.2 Dubbo 常用高级配置 4.2.6 负载均衡 【举个栗子】 现在 同一个服务 提供者,我们把它 部署在了…

Dijkstra迪杰斯特拉算法

1.场景 用于计算一个节点到其他节点的最短路径,特点是由其实点位中心向外层扩展(BFS思想),直至扩展到终点为止 2.认识 https://blog.csdn.net/weixin_57128596/article/details/126982769?ops_request_misc%257B%2522request%…

自动生成changelog

本文主要记录我如何在React项目中优雅的使用TypeScript,来提高开发效率及项目的健壮性。 项目目录及ts文件划分 由于我在实际项目中大部分是使用umi来进行开发项目,所以使用umi生成的目录来做案例。 . ├── README.md ├── global.d.ts ├── mo…

安全分析模型

安全分析模型自动化调优 MLOps(Machine Learning Operations)是一种人工智能 的工程实践,是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化,支持ML 模型的发布、激活、监控、性能跟踪…

Pytorch 学习之:关于 GPU 训练你必须知道的几件事

文章目录torchvision 下载的 pretrain 模型路径cuda 版本一定要适配多 cuda 训练 DataParallel 使用须知torchvision 下载的 pretrain 模型路径 使用 torchvision 来直接下载 pretrained 模型,有时候服务器的下载速度很慢,不如直接下载到本地之后传上去…

简单个人静态HTML网页设计作品 基于HTML+CSS+JavaScript仿小米手机网站 html静态在线购物商城网页制作

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

一种用于模拟电晕放电的高效半拉格朗日算法(Matlab代码实现)

目录 摘要 1 概述 2 数学模型与方法 3 讲解 3.1 测试1 3.2 测试2 3.3 测试3 3.4 测试4 4 Matlab代码实现 摘要 提出了一种无需通量校正的高效电晕放电模拟算法。称为位置-状态分离 (POSS) 方法的算法用于求解电晕放电建模中通常存在的以对流为主的连续性方程。所…

Java项目:ssm实验室预约维修管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为超级管理员、管理员、学生三种角色, 超级管理员角色包含以下功能: 通知管理、用户管理、实验室管理、实验室预…

字节跳动抖音本地生活前端招聘

一、认识Typescript (1)Javascript是一种动态类型的弱类型语言 Javascript超集: A.包含与兼容所有JS特性,支持共存 B.支持渐进式引入与升级 (2)TypeScript是一种静态类型的弱类型语言 静态类型的优点: A.可读性增强:基于语法…

Linux内存分配原理

Linux内存分配原理虚拟内存分区Linux内存分配时的maps文件brk()与sbrk()mmap()与munmap()mmap()munmap()内存分配过程更多资讯、知识,微信公众号搜索:“上官宏竹”。 虚拟内存分区 虚拟内存由于用途不同,分类也不尽相同,一般我们…

底层网络知识详解:从二层到三层-第6讲-交换机与VLAN:办公室太复杂,我要回学校

上一次,我们在宿舍里组建了一个本地的局域网LAN,可以愉快地玩游戏了。这是一个非常简单的场景,因为只有一台交换机,电脑数目很少。今天,让我们切换到一个稍微复杂一点的场景,办公室。 拓扑结构是怎么形成的? 我们常见到的办公室大多是一排排的桌子,每个桌子都有网口,…

C++11标准模板(STL)- 算法(std::minmax_element)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回范围内的最小元素和最…

非零基础自学Golang 第11章 文件操作 11.2 文件基本操作 11.2.1 文件创建与打开

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.2 文件基本操作11.2.1 文件创建与打开第11章 文件操作 11.2 文件基本操作 在学习文件操作之前&#xff0c;我们先来了解一下Linux下的文件权限。 文件有三种权限&#xff0c;分别为读取、写入和执行&#x…

设计模式2 - 创建型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【MATLAB100个实用小技巧】——图形处理(67-75)

文章目录前言系列文章67. 图像的块操作68. 图形的过滤操作69. 图像的频率操作70. 函数变换71. RADON 函数变换72. 图像分析&#xff08;1&#xff09;73. 过滤图像74. 图像的区域处理75. 图像的颜色处置前言 &#x1f30f;MATLAB是一个功能强大的软件&#xff0c;我们可以利用M…

Mycat(3):mycat的安装

1、前言 使用mycat要安装JDK.不会的去看Linux里面的安装JDK的知识点&#xff0c;这是不再做说明 也可以直接使用yum install java-1.7.0-openjdk 因为mycat 基于jdk1.7开发的&#xff0c;所有最好安装jdk1.7的版本 重要说明&#xff1a; Mycat-server-1.6-release 版本发布的版…