写在前面的话: 本笔记在参考网上视频以及博客的基础上,只作为个人学习笔记,如有侵权联系删除,谢谢!
1.1 引入依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
**1.2 添加注解**
启动类添加注解**@EnableFeignClients**开启Feign的功能
@SpringBootApplication
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class,args);
}
}
1.3 编写客户端,使用@FeignClient(value = “服务提供方服务名”)
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = "nacos-provider") //对应的服务提供方的spring.application.name配置
public interface ServiceFeginClient {
@GetMapping("/nacos-provider/sayHello/getConfig") // 服务提供方的restful请求路径
String getConfig();
@GetMapping("/nacos-provider/sayHello/test/{name}")// nacos-provider为服务提供方的context-path,无则不写
String sayHello(@PathVariable("name") String name);
}
这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:
这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。
1.4 使用Feign客户端
import com.cwh.fegin.ServiceFeginClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("hello")
public class ConsumerController {
@Autowired
private ServiceFeginClient serviceFeginClient; //编写的客户端
@RequestMapping("sayHi/{name}")
public String sayHello(@PathVariable("name") String name){
return serviceFeginClient.sayHello(name);
}
@RequestMapping("getConfig")
public String getConfig(){
return serviceFeginClient.getConfig();
}
}
1.5 总结
1、引入依赖
2、启动类上加注解@EnableFeignClients
3、使用@FeignClient编写客户端
4、使用FeignClient中定义的方法代替RestTemplate
Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:
•URLConnection:默认实现,不支持连接池
•Apache HttpClient :支持连接池
•OKHttp:支持连接池
因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。
这里我们用Apache的HttpClient来演示。
1)引入依赖
在Feign客户端的pom文件中引入Apache的HttpClient依赖:
<dependency>
<groupId>io.github.openfeigngroupId>
<artifactId>feign-httpclientartifactId>
dependency>
2)配置连接池
在Feign客户端工程的application.yml中添加配置:
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
3)抽取方法
利用Maven
分模块开发抽取FeignClient
模块
添加依赖:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
在使用该客户端的启动类@EnableFeignClients
注解上添加扫描包路径
@EnableFeignClients(basePackages = "com.cwh.feign")
同时引入feign-api公共包
<dependency>
<groupId>com.cwhgroupId>
<artifactId>feign-apiartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
同时引入feign-api公共包
<dependency>
<groupId>com.cwhgroupId>
<artifactId>feign-apiartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
在使用该客户端的地方注入即可。