Spring Cloud(Finchley版本)系列教程(三) 服务消费者(Feign)
一、Feign和OpenFeign的对比
Feign
是Netflix
公司写的,是SpringCloud
组件中的一个轻量级RESTful
的HTTP
服务客户端,是SpringCloud
中的第一代负载均衡客户端。OpenFeign
是SpringCloud
自己研发的,在Feign
的基础上支持了Spring MVC
的注解,如@RequesMapping
等等。是SpringCloud
中的第二代负载均衡客户端。Feign
是在2019
就已经不再更新了,随之取代的是OpenFeign
,从名字上就可以知道,它是Feign
的升级版。而目前很多公司项目都是Feign
的天下,OpenFeign
的普及还是需要一丢丢时间的。我们今天玩一下Feign
,需要OpenFeign
使用的小伙伴可以参考一下Spring Cloud(Kilburn 2022.0.2版本)系列教程(三) 服务消费者(OpenFeign) 。
SpringCloud F 及F版本以上 SpringBoot 2.0 以上基本上使用OpenFeign,OpenFeign如果从框架结构上看就是2019年Feign停更后出现版本,也可以说大多数新项目都用OpenFeign,2018年以前的项目在使用Feign。笔者强烈建议使用OpenFeign,紧跟新技术时代潮流。
二、创建hepServiceFeign项目
复制项目eurekaClient
,并重命名为hepServiceFeign
。
修改pom
文件,下面三项改为hepServiceFeign
,并增加Feign
依赖。
<artifactId>hepServiceFeign</artifactId>
<name>hepServiceFeign</name>
<description>hepServiceFeign</description>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
修改pplication.yml
文件,端口改为8007,spring.application.name
为hepServiceFeign
,hostname
也为hepServiceFeign
。
server:
port: 8007 # 端口号
spring:
application:
name: hepServiceFeign # Eureka名称
eureka:
instance:
prefer-ip-address: true
hostname: hepServiceFeign
client:
healthcheck:
enabled: true
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka:eurekapwd@www.huerpu.cc:1678/eureka/
修改启动类名称为HepServiceFeignApplication
,并加上@EnableFeignClients
注解开启Feign的功能。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class HepServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run(HepServiceFeignApplication.class, args);
}
}
三、定义Feign接口
定义一个Feign
接口,通过@FeignClient("服务名")
,来指定调用哪个服务。比如在代码中调用了eurekaClient
服务的"/getUserById"
接口,代码如下
package cc.huerpu.eurekaserver.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(value = "eurekaClient")
public interface UserService {
@RequestMapping(value = "/getUserById")
String getUserById();
}
创建一个UserController
,暴露接口"/getUserByIdFeign"
,通过上面定义的Feign
客户端UserService
来消费服务。
package cc.huerpu.eurekaserver.controller;
import cc.huerpu.eurekaserver.feign.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getUserByIdFeign")
public String getUserById(){
return "hepServiceFeign UserController: " + userService.getUserById();
}
}
四、Feign调用验证
启动程序,多次访问接口http://localhost:8007/getUserByIdFeign
,浏览器交替显示
hepServiceFeign UserController: {id:1,name:jason,age:23} from server:eurekaServer:8008
hepServiceFeign UserController: {id:1,name:jason,age:23} from server:eurekaServer:8009
参考文档: https://www.fangzhipeng.com/springcloud/2018/08/03/sc-f3-feign.html