SpringCloud 初识四:Hystrix服务容错保护

通过上一篇 <SpringCloud 初识三:Feign>
我们了解了feign消费服务的方式.本章将介绍服务容错保护工具:SpringCloud Hystrix

通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力;
Spring Cloud Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。

Hystrix服务降级

断开与有问题的服务访问,并快速返回定义的失败内容

基于ribbon的Hystrix服务降级

根据前面的章节<SpringCloud 初识二:服务消费与Ribbon负载>创建一个ribbon项目

Application

@SpringBootApplication
//@EnableCircuitBreaker 或 @EnableHystrix 开启Hystrix的使用
@EnableCircuitBreaker
//@EnableHystrix
public class ServerConsumerHystrixApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerConsumerHystrixApplication.class, args);
    }

}

Controller

@RestController
public class HystrixController {

    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "fallback",
        commandProperties = {@HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")}
    )
    @GetMapping("/hystrixDemo")
    public String getHystrixDemo() {
        return restTemplate.getForObject("http://server-client/demo",String.class);
    }

    public String fallback() {
        return "接口访问失败";
    }
}

使用@EnableCircuitBreaker注解时@HystrixCommand需要带上属性commandProperties = {@HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")}
使用@EnableHystrix注解只需要表明fallbackMethod失败方法就可以了

pom

spring.application.name=server-consumer-hystrix
# 应用服务web访问端口
server.port=5001
eureka.client.service-url.defaultZone=http://localhost:1001/eureka/

http://localhost:5001/hystrixDemo

  1. 启动server-client服务时:HELLO WORD post:2001,applicationName:server-client
  2. 关闭server-client服务时:接口访问失败
  3. 再启用server-client服务时:HELLO WORD post:2001,applicationName:server-client

基于Feign的Hystrix服务降级

Spring Cloud 中,Feign默认已经整合了Hystrix,所以只需要在配置中启用Hystrix就会包裹全部Feign Client中的方法,根据上一篇 <SpringCloud 初识三:Feign>内容做一些小改动

application.properties开启断路由

server.port=4001
spring.application.name=server-consumer-feign
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
#开启Hystrix断路由
feign.hystrix.enabled=true

写一个FallbackFeign 类实现FeignDemoService接口

	@Component
	public class FallbackFeign implements FeignDemoService {
	    @Override
	    public String getDemo() {
	        return "feign:接口访问失败";
	    }
	}

@component (把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>)

修改FeignDemoService接口注解@FeignClient添加fallback属性对应实现的FallbackFeign

//指定服务
@FeignClient(value = "server-client",fallback = FallbackFeign.class)
public interface FeignDemoService {

    @GetMapping("/demo")
    public String getDemo();

}

http://localhost:4001/feignDemo

  1. 启动server-client服务时:HELLO WORD post:2001,applicationName:server-client
  2. 关闭server-client服务时:feign:接口访问失败
  3. 再启用server-client服务时:HELLO WORD post:2001,applicationName:server-client
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值