作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
SpringCloud Hystrix服务降级
包含内容: 源码,全套工具
作者QQ549710689
详情描述

如遇视频不清晰,请最大化观看演示

官网:http://www.ckplayer.com,版本号:X

以下仅列出部分功能,全部功能请至官网 《手册》查看

单独监听功能:


播放状态:
跳转状态:无
缓冲:100
当前音量:0.8
是否全屏:否
控制栏:显示
还未结束
当前播放时间(秒):0
前置广告状态:
鼠标位置
切换清晰度:
点击监听:
监听截图功能

Custom Tab

    由于SpringCloud提供的服务以微服务形式向外提供接口服务,  微服务假设有三个服务, A,B,C,  A调用B的接口, B调用C的接口, 如果C接口有问题,那么A将无法对外提供正常服务, 从而服务产生雪崩现象, 为了更友好进行交互,在调用方可以使用Hystrix提供的服务降级功能, 也就是当服务不可用时,默认调用本地的一个方法

    

项目对应的实例代码可以通过【下载实例】按钮获取

开发工具: IntelliJ IDEA2017, JDK1.8, Maven 3.0.2

【项目包含内容】(见下图):   

hystrix:   服务调用方

product: 服务提供方

image.png


1. 使用 IntelliJ IDEA打开 hystrix 和 product 二个工程, 并且启动二个工程

2. hystrix代码如下:

当使用调用方调用产生异常和超时,会发生服务降级即调用 defaultFallback, fallback函数

@RestController
@DefaultProperties(defaultFallback = "defaultFallback")
public class HystrixController {

    @GetMapping("/getProductInfoList")
    public String getProductInfoList(){
        RestTemplate restTemplate = new RestTemplate();
        String str = (String)restTemplate.postForObject("http://127.0.0.1:8005/productInfoList", null, String.class);
        return str;
    }

    @HystrixCommand
    @GetMapping("/getDefaultHystrixProductInfoList")
    public String getDefaultProductInfoList(){
        RestTemplate restTemplate = new RestTemplate();
        String str = (String)restTemplate.postForObject("http://127.0.0.1:8005/productInfoList", null, String.class);
        return str;
    }

    @HystrixCommand(fallbackMethod = "fallback")
    @GetMapping("/getHystrixProductInfoList")
    public String getHystrixProductInfoList(){
        RestTemplate restTemplate = new RestTemplate();
        String str = (String)restTemplate.postForObject("http://127.0.0.1:8005/productInfoList", null, String.class);
        return str;
    }

    @HystrixCommand(commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="3000")
    })
    @GetMapping("/getHystrixTimeoutProductInfoList")
    public String getHystrixTimeoutProductInfoList(){
        RestTemplate restTemplate = new RestTemplate();
        String str = (String)restTemplate.postForObject("http://127.0.0.1:8005/productInfoList", null, String.class);
        return str;
    }





    private String fallback(){
        return "太拥挤了,请稍后再试~";
    }

    private String defaultFallback(){
        return "默认提示: 太拥挤了, 请稍后再试~";
    }
}


3.  product代码如下(提供了一个http post服务)

@PostMapping("/productInfoList")
public String productInfoList(){
    try{
        Thread.sleep(2000);
    }catch(InterruptedException e){
        e.printStackTrace();
    }

    return "这是产品信息";
}



Home