山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十四)- 微服务(4)

目录

[8. http客户端Feign](#8. http客户端Feign)

[8.1 feign远程调用](#8.1 feign远程调用)

[8.2 feign自定义配置](#8.2 feign自定义配置)

[8.3 feign性能优化](#8.3 feign性能优化)

[8.4 feign最佳实践](#8.4 feign最佳实践)


8. http客户端Feign

8.1 feign远程调用

RestTemplate存在的问题 :

  1. 代码可读性差

  2. 参数复杂URL难以维护

Feign是声明式的http客户端

使用步骤 :

  1. 引入依赖
复制代码
  
          <!--Feign客户端依赖-->
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-openfeign</artifactId>
          </dependency>
  1. 开启自动装配 在启动类上添加注解
复制代码
  
  @EnableFeignClients
  1. 创建接口声明
复制代码
  
  @FeignClient("userservice")
  public interface UserClient {
      
      @GetMapping("/user/{id}")
      User findById(@PathVariable Long id);
  }
  1. order- controller中替换原来发请求的代码
复制代码
  
     @Autowired
     private OrderMapper orderMapper;
  ​
      // 注入feign接口
      @Autowired
      private UserClient userClient;
  ​
      @GetMapping("{orderId}")
      public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
          Order order = orderMapper.findById(orderId);
          User user = userClient.findById(order.getUserId());
          order.setUser(user);
          return order;
      }

8.2 feign自定义配置

修改日志级别 :

  1. 配置文件方式 :

全局生效 :

复制代码
  
  feign:
    client:
      config:
        default:     #  default就是全局配置    如果写服务名称就是针对某个微服务的配置
          loggerLevel: FULL  # 日志级别

只针对某个微服务生效

复制代码
  
  feign:
    client:
      config:
        userservice:     # 只对userservice生效
          loggerLevel: FULL  # 日志级别
  1. 代码配置

8.3 feign性能优化

主要包括 :

  1. 使用连接池代替默认的URLCollection

  2. 日志级别,最好用basic或none

连接池配置 ;

引入依赖 :

复制代码
  
          <!--httpClient的依赖-->
          <dependency>
              <groupId>io.github.openfeign</groupId>
              <artifactId>feign-httpclient</artifactId>
          </dependency>

配置连接池 :

复制代码
  
  feign:
    client:
      config:
        default:     #  default就是全局配置    如果写服务名称就是针对某个微服务的配置
          loggerLevel: BASIC  # 日志级别
    httpclient:
      enable: true           #  支持HTTPClient的开关
      max-connection: 200       #   最大连接数
      max-connections-per-route: 50     #  单个路径的最大连接数

8.4 feign最佳实践

方式一 :

方式二 :

方式二的实现 :

  1. 新建feign-api模块 引入feign的stater的依赖

  2. 把order-service的 UserClient User实体类 FeignConfiguration配置类

  3. 复制到feign-api模块中

  4. 在order-service中引入feign-api模块的依赖

  5. 测试

相关推荐
掘金-我是哪吒10 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
茶馆大橘11 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
58沈剑12 小时前
80后聊架构:架构设计中两个重要指标,延时与吞吐量(Latency vs Throughput) | 架构师之路...
架构
想进大厂的小王14 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
九卷技术录15 小时前
(微服务)服务治理:几种开源限流算法库/应用软件介绍和使用
微服务·服务治理·限流算法
阿伟*rui15 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
ZHOU西口16 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
deephub18 小时前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
想进大厂的小王19 小时前
Spring-cloud 微服务 服务注册_服务发现-Eureka
微服务·eureka·服务发现
架构师那点事儿19 小时前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文