Hystrix是什么
Hystrix是SpringCloud内置提供的熔断组件。熔断机制主要用于程序的容错处理,让程序在出现异常时,不用出现雪崩的状态。Hystrix工作流程图
如图所示,分布式程序中。如果发现某个服务调用失败,不是雪崩,而是返回熔断处理结果。
当浏览器访问服务b时,服务b已经宕机了,就是机器死掉了,在他死掉后,如果没有做处理,则浏览器会报异常,现在熔断组件是这样,浏览器发现访问的服务调不起来,就返回fallback处理的情况,这样做,就不会报错。 保证服务死掉,程序还能正常运行。
入门配置
说明
需求:对调用方出现,远程调用异常,返回容错数据。分两部分完成该示例:
第一部分:复制《Gateway示例》创建项目(不一定需要gateway项目)
第二部分:修改调用方(客户端)实例支持Hystrix机制。
第一部分:修改Gateway示例代码
将Gateway示例复制,创建一个新项目第二部分:修改调用方(客户端)
第一步:加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
第二步:修改入口类
注意事项:@SpringCloudApplication注解等同同时加上@SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker这三个注解的功能。详情可以查看@SpringCloudApplication的声明代码理解//@SpringBootApplication
//@EnableDiscoveryClient //启动发现服务支持
//@EnableCircuitBreaker //启动Hystrix支持,必须包含该注解
@EnableFeignClients //启动Feign支持
@SpringCloudApplication //一个注解等同注释的三个注解
public class InstanceClientApplication {
public static void main(String[] args) {
SpringApplication.run(InstanceClientApplication.class, args);
}
}
第三步:修改配置文件
--必须打开Feign支持Hysterix组件##端口
server:
port: 8081
##应用名
spring:
application:
name: instance-client
##启动Feign支持熔断
feign:
hystrix:
enabled: true
##Eureka注册中心
eureka:
client:
service-url:
defaultZone: http://localhost:5121/eureka
##日志支持
logging:
level:
org.zhu.instance.client: debug
第四步:增加熔断处理类
@Component
@Slf4j
public class UserServiceApiFallback implements UserSeviceApi {
@Override
public String findUsernameById(Long id) {
log.debug("-调用远程方法findUsernameById失败");
return "Error username";
}
}
第五步:修改远程调用接口
@FeignClient(value = "instance-server",fallback= UserServiceApiFallback.class)
public interface UserSeviceApi {
@GetMapping(value = "/findUsernameById/{id}")
String findUsernameById(@PathVariable Long id);
}
第六步:测试
分别启动Eureka注册中心、Getaway网关、调用方实例以及不启动服务方实例。 使用postman发送调用方请求,查看当调用方无法连接服务方时的情况。--我们发现,果然如果服务方法不同,程序会返回处理结果
仪器表显示
需求:我们通过一个网页的方式显示Hystrix的错误情况。如何实现?答:Hystrix提供一个仪器表的功能,用于显示实时错误。
注意:以下都是在client(客户端)模块中操作
第一步:导入包
<!--spring cloud实时数据监控组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
第二步:配置支持仪器表
@SpringCloudApplication //该注解包括了,上面注释的三个注解。
@EnableFeignClients
@EnableHystrixDashboard //启动熔断仪器表
public class InstanceClientApplication {
//配置仪器表的监控路径
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
public static void main(String[] args) {
SpringApplication.run(InstanceClientApplication.class, args);
}
}
第三步:测试显示
--在浏览器输入:http://localhost:8081/client/hystrix 该uri的client是网关的前缀。请注意。当不启动网关模块时,uri: http://localhost:8081/hystrix
--在第一个输入框输入监控路径:http://localhost:8081/client/hystrix.stream
--查看结果
第四步:通过Postman发送请求
通过Postman发送请求,查看对应方法的请求查看数据 --postman发送数据--查看数据