SpringCloud学习 - Hystrix服务容错 - 服务熔断降级

书签:

1、小小例子

2、指定Class回退

 

  1. 小小例子

A服务访问B服务,B服务可能超时或者响应异常,A服务停止对B的访问(1小段时间),调用自定义Back方法,而不等死或抛异常,堵资源。

pom.xml

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

 

接着eureka-consumer-feign项目时行修改:

启动类EurekaConsumerFeignApplication.java主要添加注解@EnableCircuitBreaker和@HystrixCommand

package cn.ywj.eurekaconsumerfeign;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@EnableFeignClients
@EnableCircuitBreaker
public class EurekaConsumerFeignApplication {

   @Autowired
   private FeignTest feignTest;

   @RequestMapping("/t")
   public String t(){
      return feignTest.t();
   }

   @RequestMapping("/t2")
   public String t2(User user){
      User user1 = feignTest.t2(user);
      return user1 == null ? "null" : user1.getName()+":"+user1.getAge();
   }

   @RequestMapping("/t3")
   public String t3(User user){
      User user1 = feignTest.t3(user.getName(), user.getAge());
      return user1 == null ? "null" : user1.getName()+":"+user1.getAge();
   }

   @RequestMapping("/t5")
   public String t5(User user){
      User user1 = feignTest.t5(user);
      return user1 == null ? "null" : user1.getName()+":"+user1.getAge();
   }

   @RequestMapping("/t6")
   @HystrixCommand(fallbackMethod = "fallbackMethod")//服务熔断后会调用fallbackMethod方法
   public String t6(){
      return feignTest.t6();
   }

   public String fallbackMethod(){
      return "t6 from fallbackMethod";
   }

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

 

访问t6方法,当provider正常跑时,可以返回相关的结果,当把provider关闭后,返回的信息是”t6 from fallbackMethod”.

 

  1. 指定Class回退

创建一个类FeiginHystrixTest.java 实现接口 FeignTest.java

package cn.ywj.eurekaconsumerfeign;

import org.springframework.stereotype.Component;

@Component
public class FeiginHystrixTest implements  FeignTest{
    @Override
    public String t() {
        return null;
    }

    @Override
    public User t2(User user) {
        return null;
    }

    @Override
    public User t3(String name, Integer age) {
        return null;
    }

    @Override
    public User t5(User user) {
        return null;
    }

    @Override
    public String t6() { // 回退方法
        return "msg from FeiginHystrixTest";
    }
}

 

FeignTest.java上的@FeignClient注解修改如下:

@FeignClient(value = "eureka-provider",fallback = FeiginHystrixTest.class)// 指定要访问的服务提供者与降级处理方法

 

原来的Controller变成普通的样子

@RequestMapping("/t6")
public String t6(){
   return feignTest.t6();
}

 

application.yml添加配置

feign:
  hystrix:
   enabled: true #声明 Feign 的 Hystrix 支持

 

完毕。

基佬网址:https://github.com/woshiyinweijian/SpringCloudTestV2

猜你喜欢

转载自blog.csdn.net/u013845177/article/details/83278497