Archaius

使用Hystrix的插件机制,解决在使用线程隔离时,threadlocal的传递问题

爱⌒轻易说出口 提交于 2020-08-12 07:09:05
背景 在我们的项目中,比较广泛地使用了ThreadLocal,比如,在filter层,根据token,取到用户信息后,就会放到一个ThreadLocal变量中;在后续的业务处理中,就会直接从当前线程,来获取该ThreadLocal变量,然后获取到其中的用户信息,非常的方便。 但是,hystrix 这个组件一旦引入的话,如果使用线程隔离的方式,我们的业务逻辑就被分成了两部分,如下: public class SimpleHystrixCommand extends HystrixCommand<String> { private TestService testService; public SimpleHystrixCommand(TestService testService) { super(setter()); this.testService = testService; } @Override protected String run() throws Exception { .... } ... } 首先,我们定义了一个Command,这个Command,最终就会丢给hystrix的线程池中去运行。那,我们的controller层,会怎么写呢? @RequestMapping("/") public String hystrixOrder () {

SpringCloud- 第六篇 Hystrix参数配置(三)

核能气质少年 提交于 2020-08-11 11:11:43
1:概述 Hystrix使用Archaius作为配置属性的默认实现。官方配置文档: https://github.com/Netflix/Hystrix/wiki/Configuration 每个属性有四个优先级,依次增大: 1:代码的全局默认值 2:动态全局默认属性 可以使用全局属性文件来更改全局默认值。 3:代码实例默认 定义特定于实例的默认值,比如在HystrixCommand构造函数中设置的值 4:动态实例属性 可以动态设置实例特定的值,从而覆盖前面三个默认级别,格式是: hystrix.command.命令key.属性名称=值 2:请求上下文 1:requestCache.enabled 设置是否开启请求的缓存功能,默认true 2:requestLog.enabled 设置是否开启请求的日志功能,默认true 3:命令执行 execution.isolation.strategy 指示HystrixCommand.run()执行哪个隔离策略,选项: 1:THREAD - 它在单独的线程上执行,并发请求受线程池中线程数的限制 2:SEMAPHORE - 它在调用线程上执行,并发请求受信号计数的限制 3:官方推荐使用线程隔离策略,默认也是按照线程隔离进行处理。 4:信号量隔离的方式是限制了总的并发数,每一次请求过来,请求线程和调用依赖服务的线程是同一个线程

图解resilience4j容错机制

早过忘川 提交于 2020-08-09 10:33:23
Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计。轻量级,因为库只使用Vavr,它没有任何其他外部库依赖项。相比之下,Netflix Hystrix对Archaius有一个编译依赖关系,Archaius有更多的外部库依赖关系,如Guava和Apache Commons。 Resilience4j提供高阶函数(decorators)来增强任何功能接口、lambda表达式或方法引用,包括断路器、速率限制器、重试或舱壁。可以在任何函数接口、lambda表达式或方法引用上使用多个装饰器。优点是您可以选择所需的装饰器,而无需其他任何东西。 有了Resilience4j,你不必全力以赴,你可以选择你需要的。 https://resilience4j.readme.io/docs/getting-started 概览 本文将介绍resilience4j中的四种容错机制,不过鉴于容错机制原理的通用性,后文所介绍的这几种容错机制也可以脱离resilience4j而独立存在(你完全可以自己编码实现它们或者采用其他类似的第三方库,如 Netflix Hystrix )。下面将会用图例来解释舱壁( Bulkhead )、断路器( CircuitBreaker )、限速器( RateLimiter )、重试( Retry

Spring Boot2+Resilience4j实现容错之Bulkhead

自古美人都是妖i 提交于 2020-07-27 22:28:04
Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计。轻量级,因为库只使用Vavr,它没有任何其他外部库依赖项。相比之下,Netflix Hystrix对Archaius有一个编译依赖关系,Archaius有更多的外部库依赖关系,如Guava和Apache Commons。 Resilience4j提供高阶函数(decorators)来增强任何功能接口、lambda表达式或方法引用,包括断路器、速率限制器、重试或舱壁。可以在任何函数接口、lambda表达式或方法引用上使用多个装饰器。优点是您可以选择所需的装饰器,而无需其他任何东西。 有了Resilience4j,你不必全力以赴,你可以选择你需要的。 https://resilience4j.readme.io/docs/getting-started 概览 Resilience4j提供了两种舱壁模式 (Bulkhead) ,可用于限制并发执行的次数: SemaphoreBulkhead(信号量舱壁,默认),基于Java并发库中的Semaphore实现。 FixedThreadPoolBulkhead(固定线程池舱壁),它使用一个有界队列和一个固定线程池。 本文将演示在Spring Boot2中集成Resilience4j库

【一起学源码-微服务】Nexflix Eureka 源码二:EurekaServer启动之配置文件加载以及面向接口的配置项读取

六眼飞鱼酱① 提交于 2020-04-22 04:54:20
前言 上篇文章已经介绍了 为何要读netflix eureka源码了,这里就不再概述,下面开始正式源码解读的内容。 如若转载 请标明来源: 一枝花算不算浪漫 代码总览 还记得上文中,我们通过web.xml找到了eureka server入口的类 EurekaBootStrap ,这里我们就先来简单地看下: /** * The class that kick starts the eureka server. 负责启动Eureka server的类 * * <p> * 这里要注意两个关键点: * eureka server对应的配置类为:EurekaServerConfig * eureka client对应的配置类为:EurekaInstanceConfig * * The eureka server is configured by using the configuration * {@link EurekaServerConfig} specified by <em>eureka.server.props</em> in the * classpath. The eureka client component is also initialized by using the * configuration {@link EurekaInstanceConfig}

微服务配置中心(一)

前提是你 提交于 2020-03-26 11:36:43
3 月,跳不动了?>>> 微服务日益流行的今天,除了本身微服务的设计,实现,其配置中心也变得越来越重要和迫切,否则将发挥不出微服务的威力。 现在配置中心核心需求: 交付件和配置分离:相较于docker的内容镜像、配置文件不可变,配置中心需要提供两者可以分离的功能; 抽象标准化:配置文件的格式、配置接口都由配置中心提供,用户只要关心内容; 集中式的管理:所有的业务团队,都可使用配置中心,统一方便管理; 高可用:微服务依赖于配置中心的高可用; 实时性:及时被应用读取配置内容,变更业务功能; 治理:权限控制,不同环境、集群配置管理,灰度发布、支持回退、日志等功能; 当前一线互联网使用的配置中心 阿里巴巴 Diamond(开源) NETFLIX Archaius(开源) 携程:Apollo(开源) 百度:Disconf(开源) Spring Cloud Config 后面讲介绍Apollo配置中心和Spring Cloud Config 配置一般分为静态配置、动态配置 静态配置:和环境相关,包括数据库、中间件的连接串等,以及用户名、密码、令牌、许可证等。 动态配置: 应用配置:超时时间、线程池、对列、缓存、日志级别、限流熔断阈值、黑白名单等; 功能开关:蓝绿发布、灰度开关、降级开关、HA高可用开关、DB迁移等; 业务配置:促销规则、贷款额度、利率等业务参数、A/B测试; 来源:

聊聊HystrixPlugins

巧了我就是萌 提交于 2019-12-01 05:02:07
序 本文主要研究下HystrixPlugins HystrixPlugins hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/strategy/HystrixPlugins.java /** * Registry for plugin implementations that allows global override and handles the retrieval of correct implementation based on order of precedence: * <ol> * <li>plugin registered globally via <code>register</code> methods in this class</li> * <li>plugin registered and retrieved using the resolved {@link HystrixDynamicProperties} (usually Archaius, see get methods for property names)</li> * <li>plugin registered and retrieved using the JDK {@link ServiceLoader}</li> * <li

聊聊HystrixPropertiesStrategy

China☆狼群 提交于 2019-12-01 05:01:56
序 本文主要研究一下HystrixPropertiesStrategy HystrixPropertiesStrategy hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/strategy/properties/HystrixPropertiesStrategy.java /** * Abstract class with default implementations of factory methods for properties used by various components of Hystrix. * <p> * See {@link HystrixPlugins} or the Hystrix GitHub Wiki for information on configuring plugins: <a * href="https://github.com/Netflix/Hystrix/wiki/Plugins">https://github.com/Netflix/Hystrix/wiki/Plugins</a>. */ public abstract class HystrixPropertiesStrategy { /** * Construct an implementation of {@link

聊聊HystrixPropertiesStrategy HystrixPropertiesChainedProperty

主宰稳场 提交于 2019-11-29 23:44:13
本文主要研究一下HystrixPropertiesStrategy HystrixPropertiesStrategy hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/strategy/properties/HystrixPropertiesStrategy.java /** * Abstract class with default implementations of factory methods for properties used by various components of Hystrix. * <p> * See {@link HystrixPlugins} or the Hystrix GitHub Wiki for information on configuring plugins: <a * href="https://github.com/Netflix/Hystrix/wiki/Plugins">https://github.com/Netflix/Hystrix/wiki/Plugins</a>. */ public abstract class HystrixPropertiesStrategy { /** * Construct an implementation of {@link