SpringCloud——Feign远程调用2

CSDN话题挑战赛第2期
参赛话题:学习笔记

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

一、Feign替代RestTemplate

点击查看

二、日志配置

1.日志级别

NONE: 无日志
BASIC: 请求方法、URL、响应状态代码以及执行时间
HEADERS: 请求方法、URL、响应状态代码以及执行时间与请求头和响应头
FULL: 记录请求和响应的header、body和元数据,几乎全部信息

2.方式一:配置文件方式

  1. 全局生效
feign:
  client:
    config:
      default:
        logger-level: Full
  1. 局部生效
feign:
  client:
    config:
      userservice: # 服务名名称
        logger-level: Full

3.方式二:java代码方式

  1. 创建配置模块config,在其中创建DefaultFeignConfiguration类
package cn.itcast.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;

public class DefaultFeignConfiguration  {
    
    
    @Bean
    public Logger.Level feignLogLevel(){
    
    
        return Logger.Level.FULL; // 日志级别为
    }
}


  1. 全局配置

在启动类中天界如下注解

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class) //全局生效
  1. 局部配置

在controller类中添加如下注解,其中value是服务名称。

@FeignClient(value = "userservicec" , configuration = DefaultFeignConfiguration.class) // 局部生效

三、性能优化

方法:使用连接池(这里使用Apache HttpClient)

  1. 引入依赖
<!--HttpClient的依赖-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>
  1. 配置连接池(application.yml)
feign:
  httpclient:
    enabled: true
    max-connections: 200
    max-connections-per-route: 50

建议:日志级别使用basic或none

四、最佳实践

1.继承

将代码耦合性高的,定义一个统一的父接口,继承这个接口。

2.抽取

1.步骤

将FeignCLient抽取为一个独立的模块

  1. 创建一个新的module,命名feign-api。
  2. 引入feign依赖
<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
</dependencies>
  1. 将clients,config,pojo模块移入feign-api模块中。

image.png

  1. 在order-service中导入feign-api依赖
 <!--feign-api依赖-->
<dependency>
  <groupId>cn.itcast.demo</groupId>
  <artifactId>feign-api</artifactId>
  <version>1.0</version>
</dependency>
  1. 修改order-service中的所以与上述三个模块有关的import,改为feign-api中的包
  2. 重启测试

2.异常

重新启动时出现如下异常:
Field userClient in cn.itcast.order.service.OrderService required a bean of type ‘cn.itcast.feign.clients.UserClient’ that could not be found.

image.png

原因:
FeignClients不在启动类@SpringBootApplication扫描包的范围
解决方法:
方法一:指定FeignClients所在包

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class, basePackages = "cn.itcast.feign.clients") //全局生效

方法二:指定FeignClients字节码

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class, clients = UserClient.class)

猜你喜欢

转载自blog.csdn.net/m0_65144570/article/details/127138958