1、Feign简介
Feign是一个声明式的web服务客户端,它使得写web服务变得更简单,试想一下,在微服务项目中,多个服务分机部署在不同的服务器上,如果一个服务想要去调用另外一个服务的方法,通常会选择http请求,但在springcloud中,提供了Feign声明式客户端去更优雅的解决服务之间接口调用的问题,Feign通过@FeignClient注解方法,获取已注册到注册中心对应的服务,通过JDK动态代理实现远程调用。
2、SpringCloud整合Feign
2.1、添加provide2服务
修改provide2服务的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.springcloud</groupId>
<artifactId>provider2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
</dependencies>
</project>
2.2、配置provide2服务
修改provide2服务中的bootstrap.yaml文件,将provide2服务注册到nacos。
server:
port: 9002
spring:
application:
name: provide2
cloud:
nacos:
discovery:
server-addr: localhost:8848
2.3、添加feign接口
此处因为要调用provide1的接口,@FeignClient注解中的name属性对应接口提供方在nacos的注册中心所注册的服务名,此处我要调用provide1服务提供的/provide1/info接口,该接口Rest类型为GET。
@FeignClient(name = "provide1")
public interface FeignInterface {
@RequestMapping(value = "/provide1/info" , method = RequestMethod.GET)
Map<String,Object> hello();
}
2.4、添加控制器
添加测试控制器,运行provide1和provide2服务
@RestController
@RequestMapping("/feign")
public class HelloController {
@Autowired
private FeignInterface feignInterface;
@GetMapping("/info")
public Map<String,Object> getInfo(){
return feignInterface.hello();
}
}
在浏览器输入provide2的接口地址http://localhost:9002/feign/info,浏览器显示结果如下,接口调用成功