一、feign使用
(一)入门
原始RestTemplate访问远程http服务见链接https://blog.csdn.net/weixin_45390688/article/details/124303731
但是这样的实现并不优雅,可以使用下列方案代替。
4.调用
(二)性能优化
feign本身性能已经非常优越,但是默认使用的是URLConnection,但是URLConnection并不支持连接池,所以为了进一步提升性能,可以使用支持连接池的Apache HttpClient
1.引入HttpClient依赖
2.在yml文件中配置连接池
feign:
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
(三)使用中遇到的问题
1.传递多个参数问题
消费端
多个参数可以使用@RequestParam注解
@FeignClient(name = "userservice")
public interface UserFeignClient {
@RequestMapping(value = "/test")
public User get1(@RequestParam("id") Long id, @RequestParam("username") String username);
}
服务端
@RequestMapping("/test")
public Student save(@RequestParam("id") Long id, @RequestParam("username") String username) {
User user = new User(id,username);
return user;
}
2.传递对象问题
消费端
消费端feign接口的方法,需要注意两点,第一要加上@RequestBody注解,第二要加上method=RequestMethod.POST,feign默认是get请求,但是复杂参数请求应使用post方式
@FeignClient(name = "studentservice")
public interface StudentFeignClient {
@RequestMapping(value="student/save",method=RequestMethod.POST)
public Student save(@RequestBody Student student);
}
服务端
需要加上@RequestBody注解
@PostMapping("save")
public Student save(@RequestBody Student student) {
System.out.println(student);
return StudentService.save(student);
}
二、feign最佳实践
(一)新建项目feign-api
1.引入feign依赖
2.见client api和pojo放入项目中
(二)消费端引入新项目的依赖
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
(三)修改消费端application启动类注解@EnableFeignClients
因为springboot只会识别扫描启动类所在的包目录,当引入其他jar包时,是不会识别到它的spring注解,也就不会把相关bean加入到IOC容器,解决办法有两个:
方式一是全部引入,方式二是精准引入