Hystrix入门

在这里,我们将跳入开始使用Hystrix的一些非常基本的方法。

https://github.com/Netflix/Hystrix

从netflix定义开始-Hystrix是一个延迟和容错Java库,旨在隔离分布式环境中对远程系统,服务和第三方库的访问点。 它有助于停止级联故障,并在不可避免的故障发生的复杂分布式系统中实现弹性。

Hystrix的优势:

  • 每个线程都有一个超时,因此调用可能不会无限等待响应。
  • 在可行的情况下执行回退,以保护用户免受故障的影响。
  • 衡量成功,失败(客户端抛出的异常),超时和线程拒绝,并进行监视。
  • 实现断路器模式,如果错误百分比超过阈值,该模式将在一段时间内自动或手动停止所有对外部服务的请求。

https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica

通过引入支持注释,可以更轻松地使用Hystrix来创建Javanica项目。

@HystrixCommand

https://netflix.github.io/Hystrix/javadoc/index.html?com/netflix/hystrix/HystrixCommand.html

它用于为特定方法提供元数据/配置。 要将方法作为Hystrix命令同步运行,您需要使用@HystrixCommand批注对方法进行批注。

默认情况下,命令键的名称为命令方法名称: doTest ,默认组键名称为带注释的方法的类名称:HystrixService。 您可以使用必要的@HystrixCommand属性进行更改:

 公共类HystrixService { 
...
@HystrixCommand(commandProperties = {
@HystrixProperty(名称=“ execution.isolation.thread.timeoutInMilliseconds”,值=“ 5000”)
})
公共字符串doTest(String id){
返回“数据”;
}
}
...

Javanica使用Hystrix ConfigurationManager动态设置属性。 对于上面的示例,Javanica在后台执行下一步操作:

  ConfigurationManager.getConfigInstance()。setProperty(“ hystrix.command.doTest.execution.isolation.thread.timeoutInMilliseconds”,“ 5000”); 

fallbackMethod

通过在@HystrixCommand.声明回退方法的名称,可以实现@HystrixCommand. 此属性的值是方法的名称,如果发生后备,则需要调用该方法。

commandProperties

我们可以使用@HystrixProperty Annotation定义多个属性。 您可以在此处找到更多选项。 例如

 公共类HystrixService { 
...
@HystrixCommand(groupKey =“ HystrixGroup”,commandKey =“ doTestCommand”)
公共字符串doTest(String id){
返回“数据”;
}
}
...

默认属性

@DefaultProperties是类(类型)级别的批注,它允许使用默认命令属性,例如groupKeycommandPropertiesignoreExceptionsraiseHystrixExceptionsignoreExceptionsraiseHystrixExceptions 。 默认情况下,将为注释类中定义的每个hystrix命令使用使用此批注指定的属性,除非命令使用相应的@HystrixCommand参数明确指定了这些属性。

  @DefaultProperties(groupKey =“ DefaultGroupKey”,ignoreExceptions = {BadRequestException.class}) 
服务类{
@HystrixCommand // hystrix命令组密钥为'DefaultGroupKey'
public Object commandInheritsDefaultProperties(){
返回null;
}
@HystrixCommand(groupKey =“ SpecificGroupKey”,ignoreExceptions = {SpecificSException.class})//命令会覆盖默认的组密钥
公共对象commandOverridesGroupKey(){
返回null;
}
}

Netflix Archaius

https://github.com/Netflix/archaius/

Archaius是一个配置管理库,其重点是来自多个配置存储的动态属性。

配置Hystrix命令非常简单,您只需要遵循有关如何为每个命令传递配置键名称的约定即可。

使用本地文件作为配置源

当我们覆盖配置属性时,总是最好将它们外部化为属性文件,以便我们可以修改它们以使应用程序运行以选择新的配置,而不必一次又一次地重新编译源代码。 重新启动应用程序即可完成这项工作。

通过使用本地配置文件向应用程序提供动态属性,有两种方法可以使Archaius即开即用。

  • 默认情况下,Archaius将在应用程序的类路径中查找名为“ config.properties”的文件,并读取其内容作为配置属性。 该文件也可以位于jar文件的根目录中。
  • 此外,您可以定义系统属性“ archaius.configurationSource.additionalUrls”,其中包含本地配置文件的URL路径。 例如,将此添加到您的应用程序启动脚本中
 -Darchaius.configurationSource.additionalUrls=file:///apps/myapp/application.properties 

Archaius配置轮询调度程序:

默认情况下,Archaius使用一组URL作为配置源,并以固定的延迟对其进行轮询,这是您可以更改的一组系统属性。

在这里,它将调用fallback方法,因为我们为超时配置了1000 ms ,在getData方法中,我们使用Thread.sleep(1200)显式添加了1200 ms延迟。

测试2:

网址:http:// localhost:8080 / hystrix / getData

输出:

在这里它将调用实际的数据方法,因为我们为超时配置了5000 ms ,并且不会超时。

上面的示例代码可以在这里找到:https://github.com/audupa/spring-boot/


最初于 2017 年10月9日 发布在 medium.com 上。