spring cloud: Hystrix(六):feign的注解@FeignClient:fallbackFactory(类似于断容器)与fallback方法

fallbackFactory(类似于断容器)与fallback方法

feign的注解@FeignClient:fallbackFactory与fallback方法不能同时使用,这个两个方法其实都类似于Hystrix的功能,当网络不通时返回默认的配置数据.

fallback方法的使用:

在入口文件开启feign注解功能。

@EnableFeignClients

1

2

3

4

5

6

7

8

@EnableEurekaClient

@SpringBootApplication

@EnableFeignClients

public class FeignApp {

    public static void main(String[] args) {

        SpringApplication.run(FeignApp.class, args);

    }

}

  

2.写一个访问spring-boot-user服务的接口,同时在@FeignClient注解中使用fallback默认返回方法(断容器)

fallback=HystrixClientFallback.class

1

2

3

4

5

6

7

8

9

@FeignClient(name="spring-boot-user", fallback=HystrixClientFallback.class)

public interface UserFeignClient {

 

    // 两个坑:1. @GetMapping不支持   2. @PathVariable得设置value

    @RequestMapping(value="/simple/{id}", method=RequestMethod.GET)

    public User findById(@PathVariable("id") Long id);

     

 

}

  

3.写HystrixClientFallback类,并继承UserFeignClient类,当网络不通或者访问失败时,返回固定/默认内容

1

2

3

4

5

6

7

8

9

10

11

@Component

public class HystrixClientFallback  implements UserFeignClient{

 

    @Override

    public User findById(Long id) {

        // TODO Auto-generated method stub

        User user = new User();

        user.setId(0L);

        return user;

    }

}

  

4.controller调用spring-boot-user服务的接口

1

2

3

4

5

6

7

8

9

10

11

12

@RestController

public class MovieController {

 

    @Autowired

    private UserFeignClient userFeignClient;

     

    @GetMapping("/movie/{id}")

    public User findById(@PathVariable("id") Long id) {

        return this.userFeignClient.findById(id);

    }

     

}

  

 

fallbackFactory方法的使用

1.入口文件引入feign注解

1

2

3

4

5

6

7

8

9

@EnableEurekaClient

@SpringBootApplication

@EnableFeignClients

public class FeignApp {

 

    public static void main(String[] args) {

        SpringApplication.run(FeignApp.class, args);

    }

}

  

2.写feignClient客户端j,使用feignClient注解的fallbackFactory方法

1

2

3

4

5

6

7

8

@FeignClient(name="spring-boot-user", fallbackFactory=HystrixClientFallbackFactory.class)

public interface UserFeignClient {

 

    // 两个坑:1. @GetMapping不支持   2. @PathVariable得设置value

    @RequestMapping(value="/simple/{id}", method=RequestMethod.GET)

    public User findById(@PathVariable("id") Long id); 

 

}

  

3.写HystrixClientFallbackFactory类,和HystrixClientWithFallbackFactory类

HystrixClientWithFallbackFactory类继承UserFeignClient类(这步骤可以不写,然后在下面方法中直接换成 new UserFeignClient()

1

2

3

public interface HystrixClientWithFallbackFactory extends UserFeignClient {

 

}

  

HystrixClientFallbackFactory实现FallbackFactory类,并使用内部匿名方法类,继续UserFeignClient

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Component

public class HystrixClientFallbackFactory implements FallbackFactory<UserFeignClient> {

 

    @Override

    public UserFeignClient create(Throwable arg0) {

        // TODO Auto-generated method stub

        return new HystrixClientWithFallbackFactory() {//这步可以换成直接new接口:new UserFeignClient()

 

            @Override

            public User findById(Long id) {

                // TODO Auto-generated method stub

                User user = new User();

                user.setId(-1L);

                return user;

            }

             

        };

    }

 

}

  

4controller调用UserFeignClient接口

1

2

3

4

5

6

7

8

9

10

11

@RestController

public class MovieController {

 

    @Autowired

    private UserFeignClient userFeignClient;

     

    @GetMapping("/movie/{id}")

    public User findById(@PathVariable("id") Long id) {

        return this.userFeignClient.findById(id);

    }  

}

  

5调用

当开启spring-boot-user方法,返回数据

当关闭spring-boot-user服务时

 

转载自:https://www.cnblogs.com/achengmu/p/9911808.html

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值