java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot熔断机制

SpringBoot熔断机制之CircuitBreaker详解

作者:代码行间的无聊生活

这篇文章主要介绍了SpringBoot熔断机制之CircuitBreaker详解,SpringBoot的熔断机制在微服务架构中扮演着重要角色,其中CircuitBreaker是其核心机制之一,用于防止服务的异常状态影响到整个系统的运作,需要的朋友可以参考下

Circuit Breaker

熔断机制在微服务中必不可少,比如故障发生时怎么处理

熔断:半熔断、熔断打开、熔断关闭

服务降级

提到熔断机制还得提下服务降级服务降级往往因为服务压力过大,比如京东双促之类的服务降级方式比较多

简单举个列子:在各大电商大促销的时候往往详情页有时候是不会看到推荐之类的信息。

熔断与服务降级关系

基于Feign实现

feign:
  hystrix:
    enabled: true

基于上次写的FeignServer module来测试此功能

fallback

简单的fallback应用,在FeignClient中加入 fallback

@FeignClient(value = "ribbonserver" , fallback = FeignServerImpl.class )
public interface FeignServer {
    @RequestMapping(value ="/testRealRibbon",method= RequestMethod.GET)
    String testRealRibbon(@RequestParam("content") String content);
}

创建 FeignServerImpl 实现类,实现FeignClient的 FeignServer

@Component
public class FeignServerImpl implements FeignServer {
    public String testRealRibbon(@RequestParam("content") String content) {
        return content + ", it's fallback with feign";
    }
}

测试验证

测试结果为: Hello World, it’s fallback with feign

启动ribbonserver

测试结果为: Hello World, for Spring Boot

fallbackFactory

如果需要触发来进行熔断,则需要用 fallbackFactory

在FeignClient中加入 fallbackFactory

@FeignClient(value = "ribbonserver" , fallbackFactory = FeignServerFactoryImpl.class )
public interface FeignServer {
    @RequestMapping(value ="/testRealRibbon",method= RequestMethod.GET)
    String testRealRibbon(@RequestParam("content") String content);
}

创建 FeignServerFactoryImpl 实现类,实现FeignClient的 FeignServer

@Component
public class FeignServerFactoryImpl implements FallbackFactory<FeignServer> {
    /**
     * Returns an instance of the fallback appropriate for the given cause
     *
     * @param cause corresponds to {@link AbstractCommand#getFailedExecutionException()}
     *              often, but not always an instance of {@link FeignException}.
     */
    public FeignServer create(Throwable cause) {
        return new FeignServer() {
            public String testRealRibbon(String content) {
                return content + ", it's fallback Factory with feign";
            }
        };
    }
}

测试验证

测试结果为: Hello World, it’s fallback Factory with feign

启动ribbonserver

测试结果为: Hello World, for Spring Boot

基于Ribbon实现

@Controller
public class RibbonController {
    @Autowired
    RestTemplate restTemplate;
    private final static String serverURI = "http://ribbonserver/";
    @RequestMapping("/test")
    @HystrixCommand(fallbackMethod = "testError")
    public String testRibbon(String content) {
        System.out.println(content);
        restTemplate.getForEntity(serverURI+"testRealRibbon?content="+content,String.class);
        return "index";
    }
    public String testError() {
        return "404";
    }
}

到此这篇关于SpringBoot熔断机制之CircuitBreaker详解的文章就介绍到这了,更多相关SpringBoot熔断机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文