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/”)