书签:
1、小小例子
2、指定Class回退
- 小小例子
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”.
- 指定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