开发品牌名称获取接口的基于本地缓存的fallback降级机制

1、创建command
2、执行command
3、request cache
4、短路器,如果打开了,fallback降级机制

1、fallback降级机制

hystrix调用各种接口,或者访问外部依赖,mysql,redis,zookeeper,kafka,等等,如果出现了任何异常的情况

比如说报错了,访问mysql报错,redis报错,zookeeper报错,kafka报错,error

对每个外部依赖,无论是服务接口,中间件,资源隔离,对外部依赖只能用一定量的资源去访问,线程池/信号量,如果资源池已满,reject

访问外部依赖的时候,访问时间过长,可能就会导致超时,报一个TimeoutException异常,timeout

上述三种情况,都是我们说的异常情况,对外部依赖的东西访问的时候出现了异常,发送异常事件到短路器中去进行统计

如果短路器发现异常事件的占比达到了一定的比例,直接开启短路,circuit breaker

上述四种情况,都会去调用fallback降级机制

fallback,降级机制,你之前都是必须去调用外部的依赖接口,或者从mysql中去查询数据的,但是为了避免说可能外部依赖会有故障

比如,你可以再内存中维护一个ehcache,作为一个纯内存的基于LRU自动清理的缓存,数据也可以放入缓存内

如果说外部依赖有异常,fallback这里,直接尝试从ehcache中获取数据

比如说,本来你是从mysql,redis,或者其他任何地方去获取数据的,获取调用其他服务的接口的,结果人家故障了,人家挂了,fallback,可以返回一个默认值

两种最经典的降级机制:纯内存数据,默认值

run()抛出异常,超时,线程池或信号量满了,或短路了,都会调用fallback机制

给大家举个例子,比如说我们现在有个商品数据,brandId,品牌,一般来说,假设,正常的逻辑,拿到了一个商品数据以后,用brandId再调用一次请求,到其他的服务去获取品牌的最新名称

假如说,那个品牌服务挂掉了,那么我们可以尝试本地内存中,会保留一份时间比较过期的一份品牌数据,有些品牌没有,有些品牌的名称过期了,Nike++,Nike

调用品牌服务失败了,fallback降级就从本地内存中获取一份过期的数据,先凑合着用着

public class CommandHelloFailure extends HystrixCommand<String> {

private final String name;

public CommandHelloFailure(String name) {
    super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
    this.name = name;
}

@Override
protected String run() {
    throw new RuntimeException("this command always fails");
}

@Override
protected String getFallback() {
    return "Hello Failure " + name + "!";
}

}

@Test
public void testSynchronous() {
assertEquals("Hello Failure World!", new CommandHelloFailure("World").execute());
}

HystrixObservableCommand,是实现resumeWithFallback方法

2、fallback.isolation.semaphore.maxConcurrentRequests

这个参数设置了HystrixCommand.getFallback()最大允许的并发请求数量,默认值是10,也是通过semaphore信号量的机制去限流

如果超出了这个最大值,那么直接被reject

HystrixCommandProperties.Setter()
.withFallbackIsolationSemaphoreMaxConcurrentRequests(int value)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基于本地缓存的 fallback 降级机制 Hystrix 出现以下四种情况,都会去调用 fallback 降级机...
    kevin0016阅读 4,855评论 0 12
  • 服务降级 由于爆炸性的流量冲击,对一些服务进行有策略的放弃,以此缓解系统压力,保证目前主要业务的正常运行。它主要是...
    十丈_红尘阅读 12,598评论 0 34
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,962评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • 1. 前几天跟闺蜜聊天,她说她逛街看中一条裙子,值她半个月生活费,想买又犹豫。当时我毫不思索的回了她一句:真羡慕你...
    文长长阅读 10,038评论 28 133

友情链接更多精彩内容