微服务: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)

 

posted @   天启A  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2023-04-23 python中的字符串和列表
2023-04-23 人月神话读后感03
2023-04-23 python与c/java的异
点击右上角即可分享
微信分享提示