当前位置: 首页 > 后端技术 > Java

SpringCloud中的HystrixDashboard学习(笔记)

时间:2023-04-01 22:05:55 Java

简单介绍一下Hystrix:Hystrix是Netflix开源的一个延迟容错库。由于隔离了对远程系统、服务或第三方库的访问,防止了级联故障,从而提高了系统的可用性和容错能力。Hystrix主要通过以下几点来实现延迟和容错。Wraprequest:使用HystrixCommand将调用依赖的逻辑进行包装。微服务自动投递方式(@HystrixCommand添加Hystrix控制)——调用微服务跳闸机制:当某个服务的错误率超过一定阈值时,Hystrix可以跳闸并停止请求该服务一段时间。资源隔离:Hystrix为每个依赖维护一个小型线程池(bulkwall模式)(或信号量)。如果线程池满了,发送给依赖的请求会立即被拒绝,而不是在队列中等待,从而加快失败判定。监控:Hystrix可以近乎实时地监控运行指标和配置变化,如成功、失败、超时、请求被拒绝等。回退机制:当请求失败、超时、被拒绝或断路器打开时执行回退逻辑。回退逻辑由开发者提供,比如返回一个默认值。自愈:断路器合闸一段时间后,会自动进入“半开”状态。HystrixDashboard(仪表板)是一个实时监控Hystrix的工具。通过HystrixDashboard可以直观的看到每个HystrixCommand的请求响应时间和请求成功率。实际工作中没有实践过,先记录下自己的学习笔记吧。单应用监控项目实践:1.先新建一个springboot项目,然后添加依赖:org.springframework.cloudspring-cloud-starter-netflix-hystrix-dashboard2.2.7.RELEASE2.在启动类中添加注解:@EnableHystrixDashboard3。项目启动后,在浏览器中访问。这里的项目地址是:http://localhost:8084/hystrix,然后可以看到Dashboard的首页:可以看到dashboard项目已经创建好了,现在需要一个服务,让这个服务提供/actuator/hystrix.stream接口的路径,然后你可以使用Hystrix仪表板来监控服务。4.新建一个工程项目,使其能够提供/actuator/hystrix.stream接口。下面是一个测试例子:(1)新建项目后,添加hystrix依赖:org.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.bootspring-boot-starter-actuator(2)在修改配置文件的同时,还需要配置项目的访问入口,配置springboot监控端点的访问权限:这个是用来暴露endpoints,因为endpoints会包含很多敏感信息,除了支持直接访问的health和info,其他默认不能直接访问,可以指定(hystrix.stream)或者允许访问(*):SpringBoot的监控端点访问权限-指定访问管理:endpoints:web:exclude:hystrix.stream(3)修改启动类,在被监控服务的启动类中添加一个Bean@BeanpublicServletRegistrationBeanhystrixMetricsStreamServlet(){ServletRegistrationBeanregistration=newServletRegistrationBean(newHystrixMetricsStreamServlet());registration.addUrlMappings("/actuator/hystrix.stream");returnregistration;}(4)调用熔断接口:这里我只是写了一个远程调用接口,然后设置超时触发熔断:远程服务提供者的代码如下:@RequestMapping("/service/hello")publicStringhello(){try{Thread.sleep(4000);}catch(InterruptedExceptione){e.printStackTrace();}//业务处理(略)return"serviceprovider";}的本地消费者代码如下:/**hystrix超时为3.5秒@return*/@RequestMapping("/web/hystrix")@HystrixCommand(fallbackMethod="error",ignoreExceptions=RuntimeException.class,commandProperties={@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3500")})publicStringhystrix(){returnrestTemplate.getForEntity("http://01-SPRINGCLOUD-SERVICE-PROVIDER/service/hello",String.class).getBody();}publicStringerror(Throwablethrowable){System.out.println(throwable.getMessage());return"error";}(5)访问入口:通过路径访问入口:http://localhost:8082/actuato...【注意】:这里直接访问/hystrix.stream接口,会输出一串ping:。处理方式是先调用本项目中触发熔断的接口。结果如下:通过Dashboard首页输入以上3条数据后,点击MonitorStream按钮,可以看到Loading情况同上,因为没有访问熔断服务,所以没有监测数据。在本项目中需要调用触发熔断的接口。结果如下:具体相关详细说明:[注意矿坑]如果访问后页面出现如下提示:需要查看控件中的信息:(1)如果出现404,查看监控地址是否填写正确;(2)如果提示不在允许范围内,说明你没有配置运行和访问断路器监控页面的地址:需要在hystrix-dashBoard配置文件中添加如下配置:hystrix:dashboard:proxy-stream-allow-list:localhost大致就是这些内容,针对单体应用的监控,有其他问题请稍后补充。