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.方式一:配置文件方式
- 全局生效
feign:
client:
config:
default:
logger-level: Full
- 局部生效
feign:
client:
config:
userservice: # 服务名名称
logger-level: Full
3.方式二:java代码方式
- 创建配置模块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; // 日志级别为
}
}
- 全局配置
在启动类中天界如下注解
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class) //全局生效
- 局部配置
在controller类中添加如下注解,其中value是服务名称。
@FeignClient(value = "userservicec" , configuration = DefaultFeignConfiguration.class) // 局部生效
三、性能优化
方法:使用连接池(这里使用Apache HttpClient)
- 引入依赖
<!--HttpClient的依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
- 配置连接池(application.yml)
feign:
httpclient:
enabled: true
max-connections: 200
max-connections-per-route: 50
建议:日志级别使用basic或none
四、最佳实践
1.继承
将代码耦合性高的,定义一个统一的父接口,继承这个接口。
2.抽取
1.步骤
将FeignCLient抽取为一个独立的模块
- 创建一个新的module,命名feign-api。
- 引入feign依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
- 将clients,config,pojo模块移入feign-api模块中。
- 在order-service中导入feign-api依赖
<!--feign-api依赖-->
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
- 修改order-service中的所以与上述三个模块有关的import,改为feign-api中的包
- 重启测试
2.异常
重新启动时出现如下异常:
Field userClient in cn.itcast.order.service.OrderService required a bean of type ‘cn.itcast.feign.clients.UserClient’ that could not be found.
原因:
FeignClients不在启动类@SpringBootApplication扫描包的范围
解决方法:
方法一:指定FeignClients所在包
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class, basePackages = "cn.itcast.feign.clients") //全局生效
方法二:指定FeignClients字节码
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class, clients = UserClient.class)