hystrix dashboard是一款针对hystrix进行实时监控的工具,通过hystrix dashboard可以直观地看到各hystrix command的请求响应时间,请求成功率等数据。
工程名 | 端口 | 作用 |
---|---|---|
eureka-server | 8761 | 注册中心 |
service-hi | 8762 | 服务提供者 |
service-consumer | 8763 | 服务消费者 |
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency>
server: port: 8761 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false service-url: defaultzone: http://${eureka.instance.hostname}:/${server.port}/eureka/ spring: application: name: eureka-server
@springbootapplication @enableeurekaserver public class eurekaserverapplication { public static void main(string[] args) { springapplication.run( eurekaserverapplication.class, args ); } }
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency>
server: port: 8762 spring: application: name: service-hi eureka: client: service-url: defaultzone: http://localhost:8761/eureka/
@restcontroller public class hellocontroller { @getmapping("/hi") public string hi() { return "hello ~"; } @getmapping("/hey") public string hey() { return "hey ~"; } @getmapping("/oh") public string oh() { return "ah ~"; } @getmapping("/ah") public string ah() { //模拟接口1/3的概率超时 random rand = new random(); int randomnum = rand.nextint(3) + 1; if (3 == randomnum) { try { thread.sleep( 3000 ); } catch (interruptedexception e) { e.printstacktrace(); } } return "来了老弟~"; } }
@springbootapplication @enableeurekaclient public class servicehiapplication { public static void main(string[] args) { springapplication.run( servicehiapplication.class, args ); } }
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-ribbon</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <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>
server: port: 8763 tomcat: uri-encoding: utf-8 max-threads: 1000 max-connections: 20000 spring: application: name: service-consumer eureka: client: service-url: defaultzone: http://localhost:8761/eureka/ management: endpoints: web: exposure: include: "*" cors: allowed-origins: "*" allowed-methods: "*"
@service public class helloservice { @autowired private resttemplate resttemplate; /** * 简单用法 */ @hystrixcommand public string hiservice() { return resttemplate.getforobject("http://service-hi/hi" , string.class); } /** * 定制超时 */ @hystrixcommand(commandproperties = { @hystrixproperty(name = "execution.isolation.thread.timeoutinmilliseconds", value = "30000") }) public string heyservice() { return resttemplate.getforobject("http://service-hi/hey" , string.class); } /** * 定制降级方法 */ @hystrixcommand(fallbackmethod = "getfallback") public string ahservice() { return resttemplate.getforobject("http://service-hi/ah" , string.class); } /** * 定制线程池隔离策略 */ @hystrixcommand(fallbackmethod = "getfallback", threadpoolkey = "studentservicethreadpool", threadpoolproperties = { @hystrixproperty(name="coresize", value="30"), @hystrixproperty(name="maxqueuesize", value="50") } ) public string ohservice() { return resttemplate.getforobject("http://service-hi/oh" , string.class); } public string getfallback() { return "oh , sorry , error !"; } }
@restcontroller public class hellocontroller { @autowired private helloservice helloservice; @getmapping("/hi") public string hi() { return helloservice.hiservice(); } @getmapping("/hey") public string hey() { return helloservice.heyservice(); } @getmapping("/oh") public string oh() { return helloservice.ohservice(); } @getmapping("/ah") public string ah() { return helloservice.ahservice(); } }
@springbootapplication @enableeurekaclient @enablehystrixdashboard @enablehystrix @enablecircuitbreaker public class serviceconsumerapplication { public static void main(string[] args) { springapplication.run( serviceconsumerapplication.class, args ); } @loadbalanced @bean public resttemplate resttemplate() { return new resttemplate(); } }
先访问http://localhost:8762/hi
再打开http://localhost:8763/actuator/hystrix.stream,可以看到一些具体的数据:
单纯的查看json数据,很难分析出结果,所以,要在hystrix仪表盘中来查看这一段json,在hystrix仪表盘中输入监控地址进行监控:
打开仪表盘地址:http://www.lhsxpumps.com/_localhost:8762/hystrix
在界面依次输入:http://localhost:8763/actuator/hystrix.stream 、2000 、service-consumer;点确定。
编一个测试脚本curl.sh
while true; do curl "http://www.lhsxpumps.com/_localhost:8763/hi"; curl "http://localhost:8763/hey"; curl "http://localhost:8763/oh"; curl "http://localhost:8763/ah"; done
执行测试脚本,查看hystrix仪表盘:
可以看出 ahservice 因为模拟了1/3的概率超时,所以监控中呈现了30%左右的错误百分比。
https://github.com/gf-huanchupk/springcloudlearning/tree/master/chapter17
欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~
如对本文有疑问, 点击进行留言回复!!
[杭电多校2020]第一场 1004 Distinct Sub-palindromes
Swift -- 将本地生成的UIImage进行持久化保存(存到文件中fileManager.createFile)
网友评论