写在前面

版本依赖问题,基于Spring Cloud的微服务架构,必须考虑和慎重的问题,就是检查版本依赖的问题,我们很多时候,百度或者谷歌别人的代码实现的时候,面临最多的问题也是,我们和参照的示例环境其实是不一样的…这个在解决问题时,也是要考虑的问题。

一、springCloud 集成 HystrixCommand

1.1、集成方式

搜索Maven中央仓库,发现两个类似的东西


通过查找,发现


还有这个starter的起始依赖,包括以下几个包的实现封装

1.2、新建Maven工程


添加依赖 jar

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

1.3、配置 Hystrix(服务的降级回调)

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableHystrix
@RestController
public class Hystrix {
   
    public static void main(String[] args) {
   
        SpringApplication.run(Hystrix.class, args);
    }

    @RequestMapping(value = "/")
    @HystrixCommand(fallbackMethod = "fallback_hello",
            commandProperties = {
   
                @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
            }
    )
    public String hello() throws InterruptedException {
   
        Thread.sleep(2000);
        return "Welcome Hystrix";
    }
    private String fallback_hello() {
   
        return "请求失败,响应超时...";
    }
}

1.4、模拟请求测试

这里可以试着去修改过时时间限制,也就是请求在多少时间内,不响应,即触发降级回调方法

可以发现,当正常响应式,页面返回

当请求过时时,页面返回,响应超时的信息

二、springCloud + RestTemplate + HystrixCommand 实现

这里代码不方便贴了,可以在Github看到

三、springCloud + feignClient + Hystrix 实现

这里代码不方便贴了,可以在Github看到

三、Demo代码,可以参照这里

四、注意事项

4.1、版本依赖(检查)

4.2、常见问题

  • feignClient的请求 URL和参数映射
  • 尽量使用@RequestMapping()注解
  • 自定义fallback时,加上@Compoent注解
  • 使用feignClient时,要把 feign.hystrix.enabled=true 设置打开