博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud(三):服务容错保护——Spring Cloud Hystrix
阅读量:4570 次
发布时间:2019-06-08

本文共 3159 字,大约阅读时间需要 10 分钟。

  在微服务架构中,通常会出现服务不可用的现象,假设A为服务提供者,B为A服务的调用者,C、D为B服务的调用者,那么当A服务不可用之后,随着时间的推移就会导致B服务不可用,B服务的不可用可能会导致C、D服务的不可用,最终导致整个系统的不可用,为了解决这种级联失败的问题,在分布式架构中出现了断路器等一系列服务保护机制。

  在Spring Cloud中使用Hystrix实现断路器,Spring Cloud Hystrix是基于Netflix的开源框架Hystrix实现的。断路器的开关由关闭到打开的状态是通过当前服务健康状态(服务健康状态=请求失败数/请求总数)和设定阈值(默认10秒内的20次故障)比较决定的。当断路器开关关闭时,请求允许通过断路器,如果当前服务健康状态高于设定的阈值,则开关继续保持关闭;如果当前服务状态低于设置的阈值,则开关切换为打开状态。当断路器开关打开时,请求禁止通过,如果设置了fallback方法,则会进入fallback的流程,当断路器开关处于打开状态时,经过一段时间,断路器会自动进入半开状态并允许一个请求通过,如果该请求调用成功,则断路器会恢复到断开状态,否则继续保持打开状态。

  本节在上一节的项目基础上进行搭建,项目地址: ,要使用Spring Cloud Hystrix,只需要做如下几步即可:

1. 创建 springcloud-demo-user-hystrix 的模块, pom.xml 文件内容如下:

springcloud-demo-parent
com.fix
1.0-SNAPSHOT
4.0.0
springcloud-demo-user-hystrix
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
com.google.guava
guava
28.0-jre

2. 编写 application.yaml :

server:  port: 8030eureka:  instance:    prefer-ip-address: true     #是否显示主机的Ip  client:    service-url:      defaultZone: http://localhost:8761/eureka/     #指定eureka服务端地址spring:  application:    name: springcloud-demo-user-hystrix

3. 编写主类 UserHystrixMain ,并给主类加上 @EnableCircuitBreaker 注解表示开启断路器功能:

@SpringBootApplication@EnableEurekaClient@EnableCircuitBreakerpublic class UserHystrixMain {    public static void main(String[] args) {        SpringApplication.run(UserHystrixMain.class, args);    }    @Bean    @LoadBalanced    public RestTemplate initRestTemplate() {        return new RestTemplate();    }}

4. 编写 UserController ,并在 findOrderByUser() 方法上面加上 @HystrixCommand 注解,来指定回调方法:

@RestControllerpublic class UserController {    @Autowired    private RestTemplate restTemplate;    /**     * 按照用户id查询订单信息     * @param id 用户id     * @return 用户订单信息     */    @GetMapping("/findOrderByUser/{id}")    @HystrixCommand(fallbackMethod = "fallBackMethod")    public String findOrderByUser(@PathVariable String id) {        int orderId = 123;        return this.restTemplate.getForObject("http://SPRINGCLOUD-DEMO-ORDER/order/" + orderId, String.class);    }    /**     * 调用订单查询接口失败后的返回信息     * @param id     * @return     */    public String fallBackMethod(@PathVariable String id){        return "服务不可用,当前查询id="+id;    }}

5. 功能验证

  依次启动服务注册中心,以及其他模块,此时服务注册中心有如下服务实例:

  在浏览器中访问: 可以正常访问:

  然后关闭 springcloud-demo-order 服务,继续访问链接,就会提示如下信息:

  说明Spring Cloud Hystrix配置生效。

转载于:https://www.cnblogs.com/fengweiweicoder/p/11075054.html

你可能感兴趣的文章
xtraTabbedMdiManager控件切换时控件不更新的问题
查看>>
为易信正名
查看>>
debian8.4 ibus中文输入法
查看>>
如何使用dos命令查看MySQL当前使用的数据库?
查看>>
《JAVA程序设计》实训第一天——《猜猜看》游戏
查看>>
普通用户 crontab 任务不运行
查看>>
数据缓存方案
查看>>
OpenCV2马拉松第14圈——边缘检測(Sobel,prewitt,roberts)
查看>>
P1896 [SCOI2005]互不侵犯
查看>>
ESP定律手工脱壳步骤
查看>>
wex5 教程 之 图文讲解 登陆,注册,页面跳转
查看>>
问题7:JavaScript 常用正则示例
查看>>
xampp 虚拟机配置
查看>>
第五次实验
查看>>
从统计学角度来看深度学习(1):递归广义线性模型
查看>>
nginx发布Asp.net程序
查看>>
Spring Bean引用例子
查看>>
您访问的URL地址不被允许。
查看>>
docker 初探之简单安装 ----Windows10
查看>>
UI基础篇之UIScrollView
查看>>