feign是依赖注册中心调用的其他服务。
如果A服务调用B服务,A就是在注册中心找B服务,找到了才知道地址,才能调用接口。(也可以不用注册中心访问到B服务,需要在@feignclient的注解后面配置url,下面第四大点详细讲)
一、项目结构
配置中心
注册中心
服务A:学生服务
服务B:课程成绩服务

下面我们要实现:
服务A:学生服务 调用 服务B:课程服务的接口
二、引入依赖
A服务是调用端,需要引入依赖
B服务是被调用端,可以不用引依赖
在引入依赖的时候发现,两个依赖:spring-cloud-starter-feign和spring-cloud-starter-openfeign,这里推荐使用openfeign。
下面是他俩的区别
openfeign 和 feign
openfeign 是 spring cloud 在 feign 的基础上支持 spring mvc注解 ,如 @RequestMapping 等等,OpenFeign 的@FeignClient 可以解析Spring MVC 的 @RequestMapping注解下的接口,并通过动态代理的方式生产实现类 ,实现类中做负载均衡并且 低耦合调用其他服务。


推荐使用openfeign
引入依赖
<!--feign客户端(调用端)-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
这里没有写版本,是因为父工程引入了spring-cloud-dependencies依赖声明
三、调用端(A服务)写调用接口
3.1、编写远程调用接口:
接口FCourseService(习惯性大写F开头,表示这是Feign远程调用接口)

3.2、启动程序加注解
注解:@EnableFeignClients

3.3、使用远程调用接口
在需要使用的地方:
1、@Autowired注入FCourseService
2、使用fCourseService接口方法

到这里,远程调用环境全部准备好了。
启动A服务、B服务、注册中心、配置中心。
打开浏览器:http://localhost:8011/student/selectAllCourse
(我的A服务(学生服务)是运行在8011端口)
得到结果:

feign远程调用成功!!!!
四、扩展(不使用eureka注册中心来实现feign远程调用)
4.1、如果没有注册中心:
报错显示:Load balancer does not have available server for client: course-service(找不到服务)

4.3、实现
只需要在远程调用接口的@FeignClient后面的括号里面加上属性url就可以了:
@FeignClient(name = “course-service”,url = “http://localhost:8011/”)

本文介绍了如何在Spring Cloud中使用OpenFeign进行服务间的调用。首先,项目结构包括配置中心、注册中心、服务A(学生服务)和服务B(课程成绩服务)。接着,详细讲解了调用端(服务A)需要引入spring-cloud-starter-openfeign依赖,然后通过编写@FeignClient注解的接口来实现远程调用。在没有注册中心的情况下,可以通过在@FeignClient中直接配置url来实现调用。最后,文章提到了未使用注册中心时可能出现的找不到服务的问题及其解决方案。
SpringCloud实战之openfeign服务调用&spm=1001.2101.3001.5002&articleId=117295608&d=1&t=3&u=658b8d421b594c9aa55b42491bcbb681)
9019

被折叠的 条评论
为什么被折叠?



