Dubbo 4 Dubbo 高级特性 4.2 Dubbo 常用高级配置 4.2.2 地址缓存 4.2.3 超时

news2024/9/25 3:22:08

Dubbo

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

4 Dubbo 高级特性

文章目录

      • Dubbo
      • 4 Dubbo 高级特性
        • 4.2 Dubbo 常用高级配置
          • 4.2.2 地址缓存
          • 4.2.3 超时

4.2 Dubbo 常用高级配置

4.2.2 地址缓存

在这里插入图片描述

【一个问题】

如果 注册中心挂了,服务是否可以正常访问?

  • 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
  • 当服务提供者地址发生变化时,注册中心会通知服务消费者。

【试试】

在这里插入图片描述

上次我们 已经实现了 一次访问,OK,我现在把 zookeeper 停掉

./zkServer.sh stop

在这里插入图片描述

OK

再试一次,能否 正常访问

在这里插入图片描述

OK,效果很明显, 就算注册中心 挂掉了, 【老的】服务依然可以正常 访问

4.2.3 超时

【一个场景】

在这里插入图片描述

现在还是 有一个 消费者 和一个 提供者

而且它俩 分别 部署在了 A B 两台 机器上

现在来了 一个 用户来访问 服务消费者

在这里插入图片描述

在这里插入图片描述

这时 服务消费者 内部会单独地创建 一个线程 来去访问服务提供者来 调用 服务

服务提供者 把数据处理好 后,把数据返回 给服务消费者

在这里插入图片描述

消费者拿到后,再把数据封装一下,就可以返回 给用户了

这样整个请求过程 就算结束了【线程 也就被释放了【或者 归还到线程池】】

这是正常理想情况。

【不正常 的情况】

  • 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。

在这里插入图片描述

  • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。

在这里插入图片描述

这样A 机器可能 就会因为 资源被用光 而就会挂掉了 。

【Dubbo的解决办法】

  • dubbo 利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
  • 使用timeout属性配置超时时间,默认值1000,单位毫秒。

在这里插入图片描述

比如说这里, 3s 种之内,你B 不给我响应,我当前一定断开 这个请求

在这里插入图片描述

这样就 不会 造成 ‘积压’ 了

【试试】

① 在服务提供方,在@Service 注解上配置 :

在这里插入图片描述

现在给查 User ,让它睡一会儿

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(timeout = 3000,retries = 0) // 将这个类提供的方法【服务】对外发布,将访问的地址ip、端口、路径注册到 注册中心 中
public class UserServiceImpl implements UserService {
    public String sayHello() {
        return "Hello , Dubbo! DingJiaxiong";
    }

    public User findUserById(int id) {

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

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return user;
    }
}

OK。

为了测试效果 更明显,修改一下控制器

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
    private UserService userService;

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

        return userService.sayHello();
    }

    int i = 1;

    // 根据ID 查询用户信息
    @RequestMapping("/find")
    public User find(int id){

        new Thread(new Runnable() {
            public void run() {
                while (true){
                    System.out.println(i ++);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }).start();


        return userService.findUserById(id);
    }

}

OK。重启两个 服务

在这里插入图片描述

访问测试测试

在这里插入图片描述

OK, 基本一致 ,3 s钟 到了,该超时 了,就开始报错了

在这里插入图片描述

大概就是这么 个意思

现在 把timeout 删掉 ,看看默认是多少

在这里插入图片描述

OK, 重启 service

在这里插入图片描述

嗯,timeout 默认值是 1s

现在 在服务 提供方配个 3s,在服务消费方配 个1s

在这里插入图片描述

试试现在会是多少

在这里插入图片描述

OK, 是1

以后 定义超时尽量在 服务提供方 定义

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

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

相关文章

计算机毕业设计ssm+vue基本微信小程序的垃圾分类系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,垃圾分类小程序就是信息时代变革中的产物之一。 任何系统都要遵循系统…

uni-app卖座电影多端开发纪实(四):用户交互

@Tabs切换 + 分页加载 Tabs切换效果图 正在加载效果图 没有更多效果图 @uView组件使用 uView/Tabs的使用 uView/Tabs文档 先搂一眼! uView/loadMore的使用 uView/loadMore文档先搂一眼! @准备工作 电影条目组件封装 components/FilmItem.vue

2022/12/17 mysql 索引基本原理解读

1什么是索引 索引是帮助MySQL 高效获取数据的数据结构,通过使用索引可以在查询的过程中,使用优化隐藏器,提高系统的性能。 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 优势 类似于书籍的目录索引,提高数…

java缓存模块,ehcache/guava cache/自定义spring的CacheManager/自定义缓存

如ehcache,guava cache,redis 也有将ehcache,guava cache分级为单机缓存 将redis分为分布式缓存 ehcache官网:https://www.ehcache.org/ 这里主要说下ehcache和guava cache 单独使用ehcache(当然真正企业开发并不会单独使用ehcache,而是会和Spring或者SpringBoot集成使用) …

什么是建筑中的“光储直柔”

建筑“光储直柔”与零碳电力如影随形(2021) 《2030 年前碳达峰行动方案》(国发〔2021〕23 号)中明确提出:提高建筑终端电气化水平,建设集光伏发电、储能、直流配电、柔性用电于一体的“光储直柔”建筑。到 …

广告、推荐模型加速策略整理

当我们尝试那些开箱即用的GPU服务时,很快意识到在经济高效地利用GPU运行推荐模型服务之前需要对其优化。我们首先使用分析工具来分析在模型推理过程中发生了什么,在仔细观察分析结果时,我们注意到时间线上有大量的小CUDA Kernel在执行。 这是…

[附源码]Python计算机毕业设计Django汽配管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

linux内核内存管理-brk系统调用

【推荐阅读】 深入linux内核架构--进程&线程 浅谈linux 内核网络 sk_buff 之克隆与复制 浅析linux内核网络协议栈--linux bridge 尽管可见度不高,brk也许是最常使用的系统调用了,用户进程通过它向内核申请空间。人们常常并不意识到在调用brk&…

Python Flask构建微信小程序订餐系统 (三)

🔥 管理员登录和列表界面 🔥 账号相关登录界面 1、新建 User 对象文件 2、新建login (登录的方法)、edit (编辑的方法)、reset-pwd(重置密码的方法)方法 3、新建对应的视图层 账户管理相关界面 1、新建 Account 对象文件 2、新建index(账户列表)、set(新…

基于 Spring Cloud 的微服务脚手架

基于 Spring Cloud 的微服务脚手架 作者: Grey 原文地址: 博客园:基于 Spring Cloud 的微服务脚手架 CSDN:基于 Spring Cloud 的微服务脚手架 本文主要介绍了基于 Spring Cloud Finchley 和 Spring Boot 2.0.x 版本的微服务脚…

2006-2019年280个地级市绿色全要素生产率含原始数据和测算结果

2006-2019年280个地级市绿色全要素生产率含原始数据和测算结果 1、时间:2006-2019年 2、来源:原始数据来自各省NJ 城市NJ、各市NJ、各市社会统计GB 3、范围:包括280个地级市 4、指标包括: 投入:地级市市辖区从业人…

Spring Boot热部署配置

⭐️前言⭐️ 在我们进行Spring Boot项目的编写过程中,会有局部的代码,发生一些变动,这时候,我们只有将项目重启,发生变动的代码才能够生效,为了解决这个问题,我们可以设置Spring Boot热部署&a…

ClassLoader 隔离性的基石是namespace,证明给你看

一、背景 朋友:在我知识体系中ClassLoader的双亲委派机制是流畅丝滑的,可是看到通过委派执行类加载来保障这种分治能力,进而达到了类资源的隔离性突然就感觉有点陌生和排斥呢? 我:类的命名空间有了解嘛? …

Tableau可视化设计案例-01Tableau简介,条形图与直方图

文章目录Tableau可视化设计案例Tableau简介,条形图与直方图Tableau界面介绍Tableau绘制条形图2.1条形图1 各地区酒店数量2.2条形图2:各地区酒店均价2.3堆积图:价格等级堆积图Tableau绘制直方图3.1直方图概念与用途3.2创建评分直方图Tableau饼…

python中的split函数

返回数据类型为list # split以空格切片,返回数据类型为list a"I LOVE Python" print(a.split(" ")) print(type(a.split(" ")))运行结果如下: 可指定分隔符 # split以.切片,返回数据类型为list b"www.baidu.com" print…

Python工程师培训要多久?

Python作为目前备受初学者青睐的编程语言,学习的难度与其他语言相比,还是比较容易入门的。当然,一些零基础的初学者想要一两个月就能速成Python,还是不太可能的。尤其是想在学完之后应聘相关岗位,就算是最快的学习方式…

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

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.2 Dubbo 常用高级配置4.2.4 重试4.2.5 多版本4.2 Dubbo 常用高级配置 4.2.4 重试 之前我们已经完成 了超时的配置 而且知道 了如果服务提供方 和消…

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

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

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

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

十四、CANdelaStudio入门-DID池

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