SpringBoot微服务Feign抽取公共模块
1.概述
当多个模块都需要调用同一个服务下的接口时,可以将Feign接口抽取到公共模块,降低代码冗余和实现代码复用。
2.实现Feign接口的写法
2.1优点
- 可以将服务间调用的接口完全私有化,仅供内部调用;
- 一个Feign接口中可以写同一个服务下的多个controller下的接口方法;
2.2实现步骤
- 公共模块:编写Feign接口
- 被调用模块:实现Feign接口,并在类上加@RestController
- 调用模块:1.启动类加@EnableFeignClients注解,2.yml:feign.sentinel.enable: true
- 服务之间调用参数,使用定义param对象传参,不能使用doamin(仅当前服务中使用)
第一步:编写Feign接口
/**
* 登录Feign接口
*
* @author
* @date 2024/01/31
*/
@FeignClient(value = Constants.Remote.SERVICE_UAA, contextId = "loginApi", fallbackFactory = LoginApiFallbackFactory.class)
public interface LoginApi {
/**
* app登录
*
* @param appLoginParam 应用登录参数
* @return {@link R}<{@link Void}>
*/
@PostMapping(Constants.Remote.PREFIX_LOGIN_REMOTE + "/appLogin")
R<Void> appLogin(@RequestBody @Valid AppLoginParam appLoginParam);
}
第二步:被调用模块:实现Feign接口
注意:一定要加@RestController注解
/**
* 登录API
*
* @author
* @date 2024/01/31
*/
@RestController
public class LoginApiImpl implements LoginApi {
@Autowired
private ILoginService loginService;
/**
* 微信程序登录
*
* @param appLoginParam 应用登录参数
* @return {@link R}<{@link Void}>
*/
@Override
public R<Void> appLogin(@RequestBody AppLoginParam appLoginParam) {
loginService.appLogin(appLoginParam);
return R.success();
}
}
第三步:调用模块注入Feign发起调用
- 导入公共模块的Feign接口
- 启动类加@EnableFeignClients注解
- yml:feign.sentinel.enable: true