Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
.mvn/wrapper
src
.gitignore
README.md
mvnw
mvnw.cmd
pom.xml

README.md

Feign消费者与Hystrix断路器容错机制-微服务架构

注册中心:https://github.com/java-aodeng/hope/tree/master/micro-service1-eureka-server

服务提供者:https://github.com/java-aodeng/hope/tree/master/micro-service2-eureka-provider

后面都以上面的注册中心,和服务提供者为基础操作后续内容(代码已经开源,使用方式见我上一篇and上上篇文章)

创建Feign与Hystrix

1.添加依赖

<!--feign star-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--feign end-->
		<!--添加Hystrix依赖 断路器容错保护 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		</dependency>

2.配置yml文件

#配置服务消费者
server:
  port: 8888
spring:
  application:
    name: eureka-feign
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
#开启hystrix 指标
feign:
  hystrix:
    enabled: true

3.启动入口添加注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix//开启断路器功能
public class MicroService5FeignApplication {

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

}

测试

用feign方式消费接口并添加Hystrix断路器

1.创建service层

/**
 * Feign消费服务接口,定义一个feign接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了eureka-provider服务的“/test”接口
 * 注意:服务名大小写无所谓,@FeignClient 会把接口类交给spring所管理,也就是说是可以@Autowired注入的
 * @program:hope
 * @author:aodeng
 * @blog:低调小熊猫(https://aodeng.cc)
 * @微信公众号:低调小熊猫
 * @create:2019-03-14 13:58
 **/
@FeignClient(value = "eureka-provider",fallback = TestFeignFallback.class)//关联fallback = TestFeignFallback.class 一旦错误就会调同名称的方法
public interface TestFeign {

    @RequestMapping("/test")
    String testFegin();

    @RequestMapping("/testByParam/{from}")
    String testByParam(@PathVariable(value = "from") String from);
}

2.创建fallback类,出错调用

/**
 * @program:hope
 * @ClassName:TestFeignFallback
 * @author:aodeng
 * @blog:低调小熊猫(https://aodeng.cc)
 * @create:2019-03-16 15:33
 * @Description: 错误回调类 关联fallback = TestFeignFallback.class 一旦错误就回调同名称的方法
 * @Version 1.0
 **/
@Component
public class TestFeignFallback implements TestFeign{
    @Override
    public String testFegin() {
        return "Hystrix断路器容错机制启动";
    }

    @Override
    public String testByParam(String from) {
        return "Hystrix断路器容错机制启动";
    }
}

3.创建controller使用

/**
 * @program:hope
 * @ClassName:TestFeignController
 * @author:aodeng
 * @blog:低调小熊猫(https://aodeng.cc)
 * @create:2019-03-14 13:58
 * @Description: TODO
 * @Version 1.0
 **/
@RestController
public class TestFeignController {

    @Autowired(required = false)
    private TestFeign testFeign;

    @RequestMapping("/testFegin")
    public String testFeign(){
        return testFeign.testFegin();
    }

    /** 
    * @Description: 传参数的接口需要加接收参数的注解,service也要加接收参数的注解,服务提供者provider也要加注解,3个接口必须保持一致
    * @Param: [from]
    * @return: [from]
    * @Author: aodeng
    * @Date: 19-3-15
    */ 
    @RequestMapping("/testByParam/{from}")
    public String testByParam(@PathVariable(value = "from") String from){
        return testFeign.testByParam(from);
    }
}

结果

当我们访问/testFegin接口时,会调用服务提供者的/test接口,这个接口人为制造异常,访问出错,页面出现:Hystrix断路器容错机制启动 表示成功

这就是Hystrix回退概念:当 断路器 打开或运行错误时,执行默认的代码,也就是我们的fallback的代码

当我们的服务提供者自身问题导致接口出现故障,防止出现雪崩效应,微服务架构提供了断路器等...保护机制。

源码永久开源

https://github.com/java-aodeng/hope/tree/master/micro-service5-feign

You can’t perform that action at this time.