本文为自己做的笔记,如果要看懂可能要一点基础
一、添加依赖
在pom.xml文件添加以下代码
<!-- openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.9</version>
</dependency>
在application.yml配置一下连接池
feign:
httpclient:
enabled: true
二、写feign客户端
feign客户端类似service层,提供了一系列的接口可以调用外部的服务
package com.ruoyi.business.openFeignApi.service;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@FeignClient(name = "sys-user", url = "localhost:8096/system/sysUser")
@Component
public interface SysUserService {
@PostMapping("/insertsysUserList")
R insertsysUserList(@RequestBody List<Map<String,Object>> list,@RequestHeader("Authorization") String token);
@GetMapping("/selectsysUserList")
List<Map<String,Object>> selectsysUserList(@RequestParam("userId")String userId,@RequestHeader("Authorization")String token);
}
如图示为各部分解析:
重要的地方讲一下:
1. @FeginClient定义feign客户端,在项目中你可以有几十个这样的客户端,但名字不能重复;因为我要调用外部模块的服务,就要加localhost:8096等等的外部路径
2. 路径必须和你要调用的外部服务路径完全一致,方法名最好也一致
3. 如果你有一个Get请求,参数是String id、String name这样有多个参数的,最好给每个参数都加上@RequestParam注解,否则feign容易误转为post请求导致报错
4. 比如说我有一个teacher模块,要调用student模块的获取学生信息,会返回一个studentVo类,但这样是错的,因为studentVo类只在student模块中有,teacher模块是没有的,所以正确的做法是返回一个Map<String,Object>
5. 写完feign客户端后,你可以在调用者模块的controller写一个简单的方法来看看是否正确调用外部服务并返回
6. 调用外部服务时要把token也作为参数传给被调用者,不然外部服务没有权限执行;
7. 写完这个feign客户端(我这里命名成service)后把他注入到调用者的controller或者impl即可使用