feign

Posted licha233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了feign相关的知识,希望对你有一定的参考价值。

一.什么是feign

之前使用ribbon作为负载均衡来进行实现consumer调用provider,这种调用模式需要去借助restful风格(RestTemplate),这种调用方式违背了程序员的思维。

后来springcloud提供了另外一种符合程序员思维的调用方式:声明式服务调用(Feign)

1.feign

虽然springcloud把他定义为声明式服务调用,但他仍然是一个负载均衡(换句话说,也可以实现负载均衡功能),其实feign只是集成了ribbon在里面,所有的负载均衡功能都是在ribbon所实现的,feign只要做调用

2.什么是声明式服务调用

技术图片

二.feign使用

1.首先创建consumer-feign工程

2.然后去创建api工程

3.在api工程中,只需要编写service层的接口,其他的什么都不需要写,然后让consumer工程去调用api工程中的service接口

4.因为consumer需要调用api工程,所以consumer必须要依赖于api工程

? api中都是service层的接口,因为api在这里用的不是serviceImpl实现类,而是直接对应了provider的controller,所以api不需要依赖service层

5.因为最终api中的方法也有返回值(Book,List...),所以需要依赖于model

6.feign依赖(放在api工程中):因为feign层 依赖api层 并且api层也需要feign 所以就吧依赖放在api层

 		<!--feign 依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

三.feign的注意事项

1..在feign中,所有的接口方法的返回值类型以及方法名还是参数名都必须要和provider项目中的方法一模一样

2.在使用feign的时候,接口中的方法也必须要使用@GetMapping和@PostMapping这里也必须要和provider的方法注解一模一样,只要feign报错,无非就是以上的两个点没有注意到,还有绝对就是找不到provider项目

3.千万不要忘记在接口上添加注解(@FeignClient)

//value 指向配置文件中spring.application.name的值
@FeignClient(value = "employee-provider")

以上是关于feign的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习--- Feign详解(附代码压缩包)

SpringCloud学习--- Feign详解(附代码压缩包)

一:Feign解决的问题

Feign入门之快速实战

spring cloud中如何通过feign调整负载均衡规则

SpringCloudAlibaba微服务调用组件-Feign