精华内容
下载资源
问答
  • 什么是服务降级当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。在官方给定的示例代码中,是这样的...

    什么是服务降级

    当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

    在官方给定的示例代码中,是这样的,通过在@HystrixCommand下面声明回退方法的名称可以实现优雅降级。也就是说当该请求发生异常时,会调用该回退方法进行返回处理。

    重要的是要记住,Hystrix命令和回退应该放在同一个类中,并且具有相同的方法签名(失败的执行异常的可选参数)。

    Fallback方法可以有任何访问修饰符。defaultUser在任何错误的情况下,方法将用于处理回退逻辑。如果您需要将回退方法defaultUser作为单独的Hystrix命令运行,则需要使用注释对其进行HystrixCommand注释,如下所示:

    服务降级Demo

    创建 Maven 项目

    1、修改pom.xml文件,添加 hystrix 依赖

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    4.0.0

    com.sxt

    springcloud-eureka-consumer-ribbon-hystrix

    0.0.1-SNAPSHOT

    org.springframework.boot

    spring-boot-starter-parent

    1.5.13.RELEASE

    UTF-8

    UTF-8

    1.8

    org.springframework.cloud

    spring-cloud-dependencies

    Dalston.SR5

    pom

    import

    org.springframework.boot

    spring-boot-starter-web

    org.springframework.boot

    spring-boot-starter-test

    test

    org.springframework.cloud

    spring-cloud-starter-config

    org.springframework.cloud

    spring-cloud-starter-eureka-server

    org.springframework.cloud

    spring-cloud-starter-hystrix

    org.springframework.boot

    spring-boot-maven-plugin

    2、修改Consumer的业务方法,使用 @HystrixCommand 注解完成优雅降级

    以下四种情况将触发 getFallback 调用

    (1) 方法抛出非 HystrixBadRequestException 异常。

    (2) 方法调用超时

    (3) 熔断器开启拦截调用

    (4) 线程池/队列/信号量是否跑满

    3、修改启动类,在启动类中开启熔断。

    4、全局配置文件

    spring.application.name=eureka-consumer-ribbon-hystrix

    server.port=9010

    #设置服务注册中心地址,指向另一个注册中心

    eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/

    API 和 product参考之前女巫在说谎:Feign

    正常访问测试

    异常访问测试

    展开全文
  • ReentrantReadWriteLock的锁策略有两种,分为公平策略和非公平策略,两者有些小区别,为便于理解,本小节将以示例的形式来说明多线程下,使用公平策略的读写锁是如何处理的。其中读锁是共享锁,写锁是排他锁。只要...

    ReentrantReadWriteLock的锁策略有两种,分为公平策略和非公平策略,两者有些小区别,为便于理解,本小节将以示例的形式来说明多线程下,使用公平策略的读写锁是如何处理的。

    其中读锁是共享锁,写锁是排他锁。只要存在写锁,临界区资源互斥。

    锁降级:写锁换读锁。


    可以看出ReentrantReadWriteLock拥有写锁WriteLock和ReadLock内部类,同时也拥有Sync内部类,实现了公平锁和非公平锁实现类,Sync又继承与AQS组件。

    公平读写锁:

    拥有写锁的线程能同时拥有读锁,即当线程拥有写锁的同时请求读锁,该临界区依然互斥。即临界区同时出现写锁和读锁。

    即使拥有写锁的线程释放写锁唤醒了后继在等待队列需要读锁的线程,若后继线程没有重入读锁,临界区依然互斥。即出现临界区只有读锁但无法重入的状况。

    首先看一下即将出场的伙伴们,我们一共会出场几个线程,还有用于实现读写机制的AQS同步器队列。每个线程中的 R(0)W(0)表示当前线程占用了多少读写锁。

    1.线程A请求一个读锁,此时无人竞争锁,A获取读锁1,即线程A重入次数为1,如下所示:

    这里写图片描述

    2.线程B请求一个读锁,由于AQS中没有等待节点,当前处于读锁占有状态(线程A占有1个读锁),所以B成功获取读锁,如下所示:

    这里写图片描述

    3.这时候,线程C请求一个写锁,由于当前其他两个线程拥有读锁,写锁获取失败,线程C入队列,如下所示:

    这里写图片描述

    AQS初始化会创建一个空的头节点,C入队列,然后会休眠,等待其他线程释放锁唤醒。

    4.线程D也来了,线程D想获取一个读锁,虽然当于处于读锁占有阶段,但是目前D不占有任何数量的读锁,而且同步器队列中已经有等待节点,这时候,由于公平策略,D不得已,一个字,等,如下图所示:

    这里写图片描述

    5.这时候,线程A执行完了,释放了读锁,由于B仍然占有读锁,所以释放后读锁仍然没有完全释放,写锁仍然没有机会执行,如下图所示:

    这里写图片描述

    6.这次,B也执行完了,执行完后,读锁全部释放,这时候会唤醒排在同步器队头的节点C,C成功获取一个写锁,如下图所示:

    这里写图片描述

    7.一旦任何一个线程获取了写锁,除了该线程自己,其它线程都将无法获取读锁和写锁,这时候,线程C再次请求一个读锁,这是允许的,但反过来如果一个线程先获取了读锁,再获取写法则是不行的。这时候的状态如下图所示:

    这里写图片描述

    8.这时候假设线程E也来了,E想获取读锁,由于当前处于写锁状态,直接入队,如下所示:

    这里写图片描述

    9.这会C终于把活干完了,把读锁和写锁都给释放了,然后线程D被唤醒,获取了读锁,如下图所示:

    这里写图片描述

    10.这时候,如果再来一个线程,比如A,也想获取读锁,由于节点中还有线程E在等待,而且当前线程A没有获取任何读锁,不是重入状态,所以只能置入队尾,如下图所示:

    这里写图片描述

    11.这时候,如果D再次调用了一次获取读锁,由于D属于可重入状态,所以直接把读锁+1即可,如下图所示:

    这里写图片描述

    12.由于D获取的是读锁,同步队列中的E等待的也是读锁,所以E会被唤醒,获取读锁继续执行,如下图所示:

    这里写图片描述

    13.同样的,由于线程A获取的是读锁,在E执行后,会唤醒线程A,A也可以获得读锁,并继续执行,如下图所示:

    这里写图片描述

    14.最后大家各自执行,悄然退场。


    非公平读写锁:

    区别:在写锁释放后,等待队列中的读锁请求会通过CAS操作进行重入竞争。

    展开全文
  • 1.2.1 降级 10 1.2.2 限流 11 1.2.3 切流量 12 1.2.4 可回滚 12 1.3 业务设计原则 12 1.3.1 防重设计 13 1.3.2 幂等设计 13 1.3.3 流程可定义 13 1.3.4 状态与状态机 13 1.3.5 后台系统操作可反馈 14 1.3.6 后台系统...
  • 1.2.1 降级 / 10 1.2.2 限流 / 11 1.2.3 切流量 / 12 1.2.4 可回滚 / 12 1.3 业务设计原则 / 12 1.3.1 防重设计 / 13 1.3.2 幂等设计 / 13 1.3.3 流程可定义 / 13 1.3.4 状态与状态机 / 13 1.3.5 后台系统操作可反馈...
  • MySQL 5.1参考手册.chm

    2011-12-07 13:53:37
    5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序...
  • 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序...
  • MYSQL中文手册

    2013-03-11 21:21:34
    5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据...
  • MySQL 5.1参考手册

    2010-04-20 22:02:50
    5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序...
  • 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据...
  • 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序...
  • mysql5.1中文手册

    2008-01-09 09:54:20
    示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 ...
  • 输出示例: List of devices attached cf264b8f device emulator-5554 device 10.129.164.6:5555 device 输出格式为 [serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种: offline —— ...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

java降级策略示例

java 订阅