feign

简单使用

由上面可以看到,ribbon负责负载均衡,每次都是通过restTemplete来实现远程服务调用,这样操作起来比较麻烦,我们能不能像以前一样,直接通过调用serverice,来实现某项操作呢,这时feign就出现了。feign默认集成了hystrix,相当于把ribbon和hystrix的功能都封装到了一起,使用起来更加方便,我们只需要添加@EnableFeignClients@FeignClient注解即可。废话不多说,直接看代码。

  • 添加依赖
    由于demo_api和demo_web都需要feign,所以定义添加到demo_parent中。
    1. 1 <!-- feign -->
    2. 2 <dependency>
    3. 3 <groupId>org.springframework.cloud</groupId>
    4. 4 <artifactId>spring-cloud-starter-openfeign</artifactId>
    5. 5 </dependency>
    6. 复制代码
    1      @Autowired
    2    RestTemplate restTemplate;
    3    @Autowired
    4    UserService userService;
    5    //@HystrixCommand(commandProperties = {@HystrixProperty(name = //"execution.isolation.thread.timeoutInMilliseconds",value="3000")},
    6    //fallbackMethod = "requestError"
    7    //)
    8    @GetMapping("getUser")
    9    public BaseResult getUser(Integer id) {
    10        //BaseResult baseResult = restTemplate.getForObject("http://USER/user/get/1", BaseResult.class);
    11//        try {
    12//            Thread.sleep(5000);
    13//        } catch (InterruptedException e) {
    14//            e.printStackTrace();
    15//        }
    16        BaseResult baseResult = userService.get(id);
    17        return baseResult;
    18    }
    复制代码
    
    测试:
    SpringCloud之负载均衡Feign(四) - 图1feign_ceshi1.png

    熔断器

    由上面我们知道,feign默认集成了Hystrix,但是默认是关闭状态的,我们需要在yml配置文件中开启hystrix。
    1feign:
    2  hystrix:
    3    enabled: true
    复制代码
    
    添加完成后,我们就可以做熔断降级的事情了,上面hystrix那一章我们写的是单个方法的降级,这次我们做所有服务的统一降级,首先需要在UserService接口上添加上@FeignClient(value = “USER”,fallbackFactory = MyFallbackFactory.class),然后编写我们自己指定的MyFallBackFactory类,代码如下:
    1package com.lytw13.demo.fallback;
    2
    3import com.lytw13.demo.model.BaseResult;
    4import com.lytw13.demo.service.UserService;
    5import feign.hystrix.FallbackFactory;
    6import org.springframework.stereotype.Component;
    7import org.springframework.web.bind.annotation.PathVariable;
    8
    9@Component
    10public class MyFallbackFactory implements FallbackFactory<UserService> {
    11    @Override
    12    public UserService create(Throwable cause) {
    13        return new UserService() {
    14            @Override
    15            public BaseResult get(@PathVariable("id") Integer id) {
    16                return new BaseResult(400,"服务器访问人数过多,请稍候访问",null);
    17            }
    18
    19            @Override
    20            public BaseResult list() {
    21                return new BaseResult(400,"服务器访问人数过多,请稍候访问",null);
    22            }
    23        };
    24    }
    25}
    复制代码
    
    测试:
    SpringCloud之负载均衡Feign(四) - 图2feign_ceshi2.png
    作者:lytw1315
    链接:https://juejin.im/post/5df8e0eb6fb9a016153de873
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。