微服务:openFeign
openFeign是一个声明式http客户端。作用:基于springMVC常见注解,帮我们更优雅的实现http请求
引入依赖
<!--openFeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--负载均衡器--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
在启动项加上注解@EnableFeignClients
编写接口
@FeignClient("item-service") public interface ItemClient { @GetMapping("/items") List<ItemDTO>queryItemsByIds(@RequestParam("ids") Collection<Long> ids); }
调用接口
List<ItemDTO> items = itemClient.queryItemsByIds(itemIds);
优化:连接池
<!--OK http 的依赖 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> </dependency>
feign: okhttp: enabled: true # 开启OKHttp功能
最佳实践:
1.新建一个module:hm-api,把每个模块的公共API都抽取出来,在新module中引入依赖
在之后的使用中仅需要引入maven坐标即可(缺点为耦合度较高)
注意,正常情况下扫描不到client,需要在启动类中修改注解
@EnableFeignClients("com.hmall.api.client")
2.每个微服务自己抽取一个module(缺点为麻烦,且工程结构比较复杂)
openfeign日志输出
public class DefaultFeignConfig { @Bean public Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }
局部生效,是指发出去的时候拦截器会生效,因此如果你看到哪里没有携带信息,要从 信息为null-》openFeign的client-》client所属模块-》模块的主方法是否加了下面的注解信息。我在这里多次出错特意说明此问题
@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class)
全局生效
@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
2023-04-23 python中的字符串和列表
2023-04-23 人月神话读后感03
2023-04-23 python与c/java的异