什么是Feign
Feign是一个声明式WebService客户端。
在SpringCloud用于实现微服务之间的互相调用。
服务消费者无需知道服务提供者的ip和端口,只需要 指定服务名,即可通过注册中心调用到目标服务。
下面我们来实战下如何实现服务间的接口调用
基于Feign的服务间接口调用实战
- 已有基于Eureka注册中心的两个服务;
- 引入Eureka依赖;
- 使用注解@EnableEurekaClient声明作为Euraka客户端;
配置服务名和注册中心地址。
ps:如果不配置服务名,则在注册中心显示的服务名为unknown;如果不配置注册中心地址,则无法注册成功,程序启动会报错。
创建两个微服务
创建两个基于Eureka注册中心的微服务,其中一个作为服务消费者,一个作为服务提供者。
如何创建微服务可以参考:
服务提供者
把AuthenticationService作为服务提供者,并提供一个http请求接口:GET http://ip:port/user
引入spring-boot-starter-web依赖
在pom文件加入以下依赖引入,版本为2.1.0.RELEASE
1 | <dependency> |
创建controller类提供接口
1 | package com.markey.test.authenticationservice.contorller; |
配置端口号为8081
1 | #配置端口号,默认为8080,已被我的注册中心使用 |
服务消费者
把CustomService作为服务消费者,并对外提供一个接口http请求:GET http://ip:port/hello
引入openfeign依赖
在pom文件加入以下依赖引入,版本为2.1.0.M2
1 | <dependency> |
ps:这里没有指定版本,是因为使用spring-cloud-dependencies,版本号Greenwich.M3,读者如果没有引用spring-cloud-dependencies的话,可以自行给openfeign依赖加上版本号2.1.0.M2
引入服务提供者的接口
创建一个接口,接口的方法定义即为服务提供者提供的接口,这里是:GET http://ip:port/user
1 | package com.markey.test.customservice.api; |
引入spring-boot-starter-web依赖
在pom文件加入以下依赖引入,版本为2.1.0.RELEASE
1 | <dependency> |
创建controller类提供接口
将上一步声明的接口作为一个bean注入;
在方法中调用AuthenticationService提供的接口,就像调用普通bean的方法一样。
1 | package com.markey.test.customservice.controller; |
配置端口号为8082
1 | #配置端口号,默认为8080,已被我的注册中心使用 |
测试
- 启动服务注册中心;
- 启动AuthenticationService服务和CustomService服务
- 通过浏览器访问/hello接口
访问/hello接口,CustomService会调用AuthenticationService,AuthenticationService给CustomService返回“小明”,CustomService再给浏览器返回“hello,小明”