专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

SpringCloud(七)Feign

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

1.导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、找到主程序类,打上@EnableFeignClients标签开启Feigin

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableFeignClients
@EnableHystrixDashboard //开启 Hystrix Dashboard (断路器:Hystrix 仪表盘)
public class ConsumerApplication {

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

    //如果赋予了restTemplate负载均衡的能力 就只能通过服务名去调了
    @Bean
    @LoadBalanced  //赋予负载均衡的能力,默认是轮询
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

3、定义Feigin接口

使用@FeignClient注解来声明FeignClient接口,该注解的value为需要远程调用的服务,而configuration指向负载均衡策略配置类
而该接口下的“provide”方法通过Feign来调用“PRODUCER”服务的“/provide”接口

//PRODUCER:指向要访问的服务
//注意:如果要调用的服务有父前缀,不能在FeignClient接口上贴requestMapping标签,只能用path属性指定
@FeignClient(value = "provider")
public interface FeignClient{

    //当此方法被调用会自动请求到 PRODUCER服务的 /provide 资源
    @RequestMapping("/provider")
    String providerTest(@RequestParam(value = "name") String name);

}
  • 首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟mybatis的mapper很像
  • @FeignClient,声明这是一个Feign客户端,类似@Mapper注解。同时通过value属性指定服务名称
  • 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果

改造原来的调用逻辑

@RestController
public class ConsumerController {

    @Autowired
    private FeignClient feignClient;

    @RequestMapping("/consumer")
    public String consumerTest(@RequestParam(value = "name") String name){
        String s = feignClient.providerTest(name);
        return s;
    }
}

4、启动测试

访问 http://localhost:8083/consumer?name=zs 你将会看到:“zs:你好呀这里是Producer服务”和“zs:你好呀这里是另一个Producer服务”的交替出现,

说明使用feign调用服务成功,同时发现已经实现了轮询方式的负载均衡, Feign中本身已经集成了Ribbon依赖和自动配置,

因此我们不需要额外引入依赖,也不需要再注册RestTemplate对象。

另外,我们可以像那样去配置Ribbon,可以通过ribbon.xx来进行全局配置。也可以通过服务名.ribbon.xx来对指定服务配置:

provider:
  ribbon:
    ConnectTimeout: 250 # 连接超时时间(ms)
    ReadTimeout: 1000 # 通信超时时间(ms)
    OkToRetryOnAllOperations: true # 是否对所有操作重试
    MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
    MaxAutoRetries: 1 # 同一实例的重试次数

5、 Feign默认也有对Hystix的集成,只不过,默认情况下是关闭的。我们需要通过下面的参数来开启:

feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

但是,Feign中的Fallback配置不像Ribbon中那样简单了。

1)首先,我们要定义一个类,实现刚才编写的UserFeignClient,作为fallback的处理类

@Component
public class fallbackMethod implements FeignClient {

    public String providerTest(String name) {
        return "出错啦!Feign";
    }
}

2)然后在FeignClient中,指定刚才编写的实现类

FeignClient(value = "provider",fallback = fallbackMethod.class)
public interface FeignClient {

    @RequestMapping("/provider")
    String providerTest(@RequestParam(value = "name") String name);

}

3)重启测试:

我们关闭provider服务,然后在页面访问localhost:8083/provider?name=andy,显示 出错啦!Feign

文章永久链接:https://tech.souyunku.com/25093

未经允许不得转载:搜云库技术团队 » SpringCloud(七)Feign

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们