在这里,我们将跳入开始使用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
是类(类型)级别的批注,它允许使用默认命令属性,例如groupKey
, commandProperties
, ignoreExceptions
, raiseHystrixExceptions
, ignoreExceptions
和raiseHystrixExceptions
。 默认情况下,将为注释类中定义的每个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 上。