Microservice - OpenFeign
# 简介
- 一个 HTTP 客户端
- 可以配合 Eureka、Nacos 实现通过服务名调用其他微服务接口
# 快速使用
# 服务提供方 - API 模块
# 创建模块
略
# 添加依赖
<!-- 无需定义版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
# 定义接口
推荐包路径: cn.nipx.业务名称.feign
@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List<Store> getStores();
@RequestMapping(method = RequestMethod.GET, value = "/stores")
Page<Store> getStores(Pageable pageable);
@RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
Store update(@PathVariable("storeId") Long storeId, Store store);
@RequestMapping(method = RequestMethod.DELETE, value = "/stores/{storeId:\\d+}")
void delete(@PathVariable Long storeId);
}
笔记
- 这里直接复制的官方文档的,可以进一步简化,实际与 Controller 大同小异。
- 类上的
@FeignClient
最为重要,是之后调用方扫描注册容器的唯一标识,stores
为服务的名称
# 服务提供方 - 服务模块
# 创建模块
略
# 添加依赖
把 服务提供方 - API模块
# 实现接口
推荐包路径: cn.nipx.业务名称.feign.impl
实现在 API 模块定义的接口
@RestController
public class StoreClientImpl implements StoreClient{
private final StoreService storeService;
....
}
笔记
实际上它就是一个控制器
# 服务调用方
# 添加依赖
引入 服务提供方 - API模块
依赖
# 启动类
添加注解
@SpringBootApplication
@EnableFeignClients
// @EnableFeignClients(basePackages = "cn.nipx")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
笔记
当调用方与提供方所在的包路径不一致时,还需要添加 basePackages
属性告知 Client 所在包路径
# 参考资料
上次更新: 2023/04/17, 23:26:02