微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

SpringCloud配置Hystrix服务熔断和降级案例

架构 aide_941 8℃

一、引入Hystrix相关的jar

  1. <!– hystrix –>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-hystrix</artifactId>
  5. </dependency>

二、主启动类开启服务熔断(服务生产者开启即可) @EnableCircuitBreaker

  1. @SpringBootApplication
  2. @EnableEurekaClient//本服务启动后会自动注册进Eureka服务中
  3. @EnableCircuitBreaker//对hystrixR熔断机制的支持
  4. public class DeptProvider8001_Hystrix_App {
  5. public static void main(String[] args) {
  6. SpringApplication.run(DeptProvider8001_Hystrix_App.class, args);
  7. }
  8. }

三、编写服务熔断案例(服务生产者)

服务熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。

  1. @RestController
  2. public class DeptController {
  3. @Autowired
  4. private DeptService service = null;
  5. @RequestMapping(value = “/dept/get/{id}”, method = RequestMethod.GET)
  6. @HystrixCommand(fallbackMethod = “processHystrix_Get”)
  7. public Dept get(@PathVariable(“id”) Long id) {
  8. Dept dept = this.service.get(id);
  9. if (null == dept) {
  10. throw new RuntimeException(“该ID:” + id + “没有没有对应的信息”);
  11. }
  12. return dept;
  13. }
  14. public Dept processHystrix_Get(@PathVariable(“id”) Long id) {
  15. return new Dept().setDeptno(id).setDname(“该ID:” + id + “没有没有对应的信息,null–@HystrixCommand”)
  16. .setDb_source(“no this database in MySQL”);
  17. }
  18. }

测试:

四、编写服务降级案例(服务消费者)

服务降级一般是指整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。

1)、全局配置添加,开启服务降级

  1. feign:
  2. hystrix:
  3. enabled: true

2)、编写降级后的业务提示

  1. @Component
  2. public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>{
  3. @Override
  4. public DeptClientService create(Throwable cause) {
  5. // TODO Auto-generated method stub
  6. return new DeptClientService() {
  7. @Override
  8. public Dept get(long id) {
  9. return new Dept().setDeptno(id).setDname(“该ID:” + id + “没有没有对应的信息,null–@HystrixCommand”)
  10. .setDb_source(“no this database in MySQL”);
  11. }
  12. @Override
  13. public List<Dept> list() {
  14. // TODO Auto-generated method stub
  15. return null;
  16. }
  17. @Override
  18. public boolean add(Dept dept) {
  19. // TODO Auto-generated method stub
  20. return false;
  21. }
  22. };
  23. }
  24. }

3)、服务消费者调用业务逻辑,当生产者服务关闭以后会走2)定义的方法

  1. @RestController
  2. public class DeptController_Consumer {
  3. @Autowired
  4. private DeptClientService service = null;
  5. @RequestMapping(value = “/consumer/dept/get/{id}”)
  6. public Dept get(@PathVariable(“id”) Long id) {
  7. return this.service.get(id);
  8. }
  9. @RequestMapping(value = “/consumer/dept/list”)
  10. public List<Dept> list() {
  11. return this.service.list();
  12. }
  13. @RequestMapping(value = “/consumer/dept/add”)
  14. public Object add(Dept dept) {
  15. return this.service.add(dept);
  16. }
  17. }

转载请注明:SuperIT » SpringCloud配置Hystrix服务熔断和降级案例

喜欢 (0)or分享 (0)