API地址:https://nacos.io/zh-cn/docs/open-api.html#3.1
如果访问不到,就是被和谐了
1、什么是Nacos
服务发现、服务配置、服务管理平台
注册中心、配置中心、服务管理
2、Nacos注册中心
主流的注册中心大概就这五种,从各方面来说,Nacos > Eureka> Consul > Zookeeper > CoreDNS
Eurake之前市场占有率也很大,后来停更了,逐渐被Nacos或Consul替代,CoreNDS不了解,看图的话,应该也是不太行,Zookeper的话,目前不支持负载均衡,还需要集成第三方,所以选用的话,要不然就是Nacos,要不然就是Consul
3、Nacos Server部署
- 下载解压缩
这里用windows版本,linux也是一样的,就不开虚拟机了
下载地址:https://github.com/alibaba/nacos - 修改
startup.cmd
下载解压好以后,默认是集群环境,本地测试先修改成单体的,编辑bin目录下的startup.cmd
集群cluster
改成单体standalone
- 启动
执行startup.cmd
启动,可以看到默认访问地址
启动成功最后会提示Nacos started successfully in stand alone mode. use embedded storage
访问提示的页面,成功访问
默认的账号密码都是nacos
4、Nacos Client
创建IDEA项目,引入依赖,配置环境,启动项目,查看是否注册成功
目录结构
4.1、引入依赖
要注意版本对应
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.2.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
<org.apache.httpcomponents.version>4.5.3</org.apache.httpcomponents.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<!-- spring cloud alibaba的版本管理,通过dependency完成继承 -->
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${org.apache.httpcomponents.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
4.2、配置文件
stock-nacos
server:
port: 8021
# nacos配置,服务注册中心配置
spring:
application:
name: stock-nacos #微服务名称(注册到注册中心的名称)
cloud:
nacos:
server-addr: 127.0.0.1:8848 #服务地址,可不配,默认地址127.0.0.1:8848
discovery:
username: zhangsan # nacos登录界面用户名,可不配,默认nacos
password: pwd123 # nacos登录界面密码,可不配,默认nacos
namespace: public # nacos实例,可不配,默认public
order-nacos
server:
port: 8020
# nacos配置,服务注册中心配置
spring:
application:
name: order-nacos #微服务名称(注册到注册中心的名称)
cloud:
nacos:
server-addr: 127.0.0.1:8848 #服务地址,可不配,默认地址127.0.0.1:8848
discovery:
username: zhangsan # nacos登录界面用户名,可不配,默认nacos
password: pwd123 # nacos登录界面密码,可不配,默认nacos
namespace: public # nacos实例,可不配,默认public
启动项目order-nacos
和stock-nacos
,注册成功
4.3、controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
//原本通过ip:localhost,换为stock-nacos,stock-nacos是服务注册到服务中心的服务名
String msg=restTemplate.getForObject("http://stock-nacos/stock/reduct",String.class);
return "Hello World"+msg;
}
}
4.4、访问服务
访问order的服务:http://localhost:8020/order/add
后台
解决:
RestTemplate
添加负载均衡@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate=builder.build();
return restTemplate;
}
再次访问
4.5、负载均衡访问
更改stock的controller代码,加入端口号展示,方便查看是否实现了负载均衡(4.4中负载均衡注解已经加入了)
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("reduct")
public String reduct(){
return "请求"+port+"成功";
}
}
再启动一个服务:https://blog.csdn.net/a3562323/article/details/125190445
访问order地址,查看是否负载均衡成功:http://localhost:8020/order/add
可以看到,负载均衡成功
5、Nacos管理界面
5.1、命名空间
项目中有多个环境,例如开发、测试等,可以点击新增命名空间,添加新的
新增了两个,添加成功
配置文件中指定它的命名空间
5.2、服务详情
雪崩保护
- 保护阈值:0-1之间的值,0关闭
- 临时实例:
spring.cloud.nacos.discovery.ephemeral=false
默认true,宕机后在服务列表中是否保留(一般的服务,挂掉后,过了一定时间,就会从服务列表消除)
true:非永久实例
false:永久实例
健康实例数/总实例数<保护阈值
保护阈值小于设置的阈值,就触发雪崩保护,会调用不健康的服务来支持服务,那就会有一个问题,既然不健康的服务都挂掉了,调用肯定也是访问不到的,那么还调用不健康的服务做什么。
感觉它的作用最多的就是,保证洪峰到来,依旧把一部分流量分配到不健康的服务,虽然客户体验不佳,但是保障了健康的服务不会崩掉,
雪崩保护了解就好,一般nacos也只是做服务注册中心来用,雪崩这种情况有熔断和降级来处理
5.3、配置信息
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
6、Nacos集群
搭建伪集群
nacos默认是使用内存,为了保证数据一致性,使用外置的数据源mysql(5.7以上)
先使用nacos数据库脚本(nacos目录
下的conf
中,nacos-mysql.sql
),创建一个nacos的数据库
6.1、配置数据源
下载linux需要的nacos安装包
解压缩后,准备三份,8849、8850、8851,复制粘贴就可以了,使用他们来做集群
- 改变端口
编辑application.properties
,server.port
- 改变数据源
# 使用mysql数据源
spring.datasource.platform=mysql
- 连接数量
# 连接数量
db.num=1
- 数据库连接信息,要指定我们创建的nacos的数据库信息
db.url.0=jdbc:mysql://192.168.0.141:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
以上的信息,8849、8850、8851都要改,改成对应的端口号
6.2、节点配置
conf
目录下,复制一个cluster.conf.example
,命名为cluster.conf
,然后编辑cluster.conf
配置我们6.1中完成的三个nacos集群信息
# 集群信息
127.0.0.1:8849
127.0.0.1:8850
127.0.0.1:8851
以上操作,参与集群的三个nacos都要操作
6.3、启动文件修改
编辑bin
下面的startup.sh
- 确认启动模式是集群模式
cluster
- 修改服务内存
测试用的,就不用那么大内存了,改小点
#JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
以上修改,三个nacos都改
6.4、启动服务
[root@localhost bin]# ./startup.sh
/usr/java/jdk1.8.0_131/bin/java -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos/nacos8849/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Djava.ext.dirs=/usr/java/jdk1.8.0_131/jre/lib/ext:/usr/java/jdk1.8.0_131/lib/ext -Xloggc:/usr/local/nacos/nacos8849/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/usr/local/nacos/nacos8849/plugins/health,/usr/local/nacos/nacos8849/plugins/cmdb -Dnacos.home=/usr/local/nacos/nacos8849 -jar /usr/local/nacos/nacos8849/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos/nacos8849/conf/ --logging.config=/usr/local/nacos/nacos8849/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /usr/local/nacos/nacos8849/logs/start.out
已经启动了,查看日志信息
[root@localhost bin]# tail -f ../logs/start.out
我这里是报错了
Caused by: com.mysql.cj.exceptions.CJException: null, message from server: "Host '192.168.0.156' is not allowed to connect to this MySQL server"
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:129)
at com.mysql.cj.protocol.a.NativeProtocol.rejectProtocol(NativeProtocol.java:392)
at com.mysql.cj.protocol.a.NativeProtocol.readServerCapabilities(NativeProtocol.java:518)
at com.mysql.cj.protocol.a.NativeProtocol.beforeHandshake(NativeProtocol.java:404)
at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1450)
at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:849)
... 186 more
我这个报错原因是我连接的是远程的数据库,数据库没有开启远程连接
使用命令查看配置信息
use mysql;
select host from user where user = "root";
显示localhost
执行update user set host = '%' where user ='root'
将Host设置为通配符%
然后再执行命令
use mysql;
select host from user where user = "root";
显示%
重新启动nacos,启动成功
查看状态,刚刚启动8849已经是在线状态了
启动50和51,全部上线成功
6.5、 nginx负载均衡
修改nginx配置
[root@localhost nginx]# vim conf/nginx.conf
# nacos集群负载均衡
upstream nacoscluster{
server 127.0.0.1:8849;
server 127.0.0.1:8850;
server 127.0.0.1:8851;
}
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /nacos/ {
proxy_pass http://nacoscluster/nacos/;
}
通过nginx访问,访问成功
项目配置文件修改
修改相关配置文件的ip和端口,改为nginx的
server:
port: 8021
# nacos配置,服务注册中心配置
spring:
application:
name: stock-nacos #微服务名称(注册到注册中心的名称)
cloud:
nacos:
# server-addr: 127.0.0.1:8848 #服务地址,可不配,默认地址127.0.0.1:8848
server-addr: 192.168.0.157:8847 # nginx访问地址,使用了集群,通过nginx负载均衡,
7、负载均衡
负载均衡主要以下两种:
- 客户端负载均衡
- 服务端负载均衡
7.1、客户端负载均衡
1、客户端从注册中心拿到所有可用节点的列表;
2、客户端将拿到的列表结合在本地制定的负载均衡策略,分发到对应的服务;
7.2、服务端负载均衡
服务端负载均衡又分为软件和硬件,软件就是nginx,通过复杂均衡策略,分发请求到对应的服务注册中心(6.5),硬件是F5
7.3、Nacos默认的负载均衡Ribbon
1、 ribbon依赖
<!-- nacos服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
nacos-discovery
已经默认引入了ribbon的依赖,所以不用单独引入
2、 添加@LoadBalanced
注解
在RestTemplate
上面添加@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate=builder.build();
return restTemplate;
}
3、 请求修改为服务名
@Autowired
RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
//修改为服务名
String msg=restTemplate.getForObject("http://stock-nacos/stock/reduct",String.class);
return "Hello World"+msg;
}
4、ribbon负载均衡策略
所有负载均衡的父接口IRule
常用的负载均衡策略
RandomRule
随机策略,随机选择一个服务实例。
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡
RoundRobinRule
轮询策略,按照顺序每个都轮流一次。
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡
RetryRule
重试策略,在轮询的基础上,如果调用一个服务,返回Null,也就是调用失败,就重新调用下一个服务。
ribbon:
ConnectTimeout: 2000 # 请求连接的超时时间
ReadTimeout: 5000 # 请求处理的超时时间
stock-nacos: # nacos 中的服务 id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡
WeightedResponseTimeRule
权重策略(如果要设置基于nacos的手动设置权重
的方式,就要配置NacosRule
,而不是WeightedResponseTimeRule
),响应时间越短的服务,权重越大,权重大的服务被选中的概率较大。
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
BestAvailableRule
最小连接数策略,使用并发请求最小的服务实例。
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #设置负载均衡
ZoneAvoidanceRule
默认规则,区域敏感策略,假如服务部署在北京和上海,如果你是在北京发起的请求,那就调用的是北京的这个服务,如果没有区域的概念,那就使用的是RoundRobinRule
轮询策略。
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule
AvailabilityFilteringRule
可用性敏感策略,过滤掉非健康的服务实例,然后再选择连接数较小的服务实例
stock-nacos: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
7.3.1、修改默认的负载均衡策略
两种方式,配置类的方式和配置文件的方式
- 配置类的方式
需要注意的是,配置类不能放在SpringBoot启动类的同级以及下级目录,因为SpringBoot默认扫描的是同级及下级目录,要放在扫描不到的地方,如果被扫描到了,会被所有服务应用,针对不同的服务,可能有不同的访问策略,所以要在springBoot启动类单独指定。
config
@Configuration
public class RibbonRandomRuleConfig {
/**
* 方法名一定要叫iRule
* @return
*/
@Bean
public IRule iRule(){
//设置为随机
return new RandomRule();
}
}
启动类
//RibbonClients指定要使用自定义策略的服务(name)和配置类(configuration )
@RibbonClients(value = {
@RibbonClient(name="stock-nacos",configuration = RibbonRandomRuleConfig.class)
})
@SpringBootApplication
//@EnableDiscoveryClient在新版的springboot中,不加也可以正常注册
@EnableDiscoveryClient
@RibbonClients(value = {
@RibbonClient(name="stock-nacos",configuration = RibbonRandomRuleConfig.class)
})
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate=builder.build();
return restTemplate;
}
}
- 配置文件的方式
配置文件中就不需要在启动类配置@RibbonClients,直接在配置文件中设置
stock-nacos: # 调用的服务名
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #设置策略
设置为了nacos的权重策略
修改权重,8022的权重修改为5
可以看到,大多数都是访问到的8022,权重生效,权重只是提高它的概率,并不是说,每次都是
7.3.2、自定义负载均衡策略
继承AbstractLoadBalancerRule
,不用注解
public class CustomRule extends AbstractLoadBalancerRule {
@Override
public Server choose(Object o) {
ILoadBalancer loadBalancer = this.getLoadBalancer();
//获得当前请求的服务实例
List<Server> reachableServers = loadBalancer.getReachableServers();
//随机获取一个数
int random = ThreadLocalRandom.current().nextInt(reachableServers.size());
//获取某个服务实例
Server server = reachableServers.get(random);
//判断实例是否存活
//if(server.isAlive()){
// return null;
//}
return server;
}
}
可以使用配置类,也可以使用配置文件,配置文件方便一点,使用配置文件
指定自定义类
stock-nacos:
ribbon:
NFLoadBalancerRuleClassName: com.wzw.ribbon.rule
7.3.3、饥饿加载
第一次调用服务的时候比较慢,可以设置为项目启动就加载
ribbon:
eager-load:
# 指定哪些服务使用饥饿加载,多个使用逗号分隔
clients: order-nacos
# 开启ribbon饥饿加载
enabled: true
7.4 Spring Cloud LoadBalancer
Spring Cloud LoadBalancer是Spring Cloud官方提供的客户端负载均衡器,用来替换ribbon,但是目前为止,它的负载均衡策略只有两中,轮询和随机
Spring官方提供了两种负载均衡的客户端:
- RestTemplate:
目前常用的服务调用客户端,默认依赖jdk的HTTP来接工具 - WebClient
从Spring WebFlux 5.0开始提供的一个非阻塞的基于响应式编程的http请求客户端工具,响应式编程基于reactor。目前使用量比较小
7.4.1 RestTemplate整合LoadBalancer
因为nacos-discovery
默认引入了ribbon,需要先把ribbon排除掉或者禁用
- 排除ribbon
<!-- nacos服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
- 禁用
server:
port: 8030
# nacos配置,服务注册中心配置
spring:
application:
name: order-service #微服务名称(注册到注册中心的名称)
cloud:
nacos:
# server-addr: 127.0.0.1:8848 #服务地址,可不配,默认地址127.0.0.1:8848
server-addr: 192.168.0.157:8847 # nginx访问地址,使用了集群,通过nginx负载均衡,
# 不使用ribbon
loadbalancer:
ribbon:
enabled: false
- 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加Loadbalancer依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
7.5、微服务调用组件Feign
接口调用的实现
- Httpclient
Httpclient是Apache Jakarta Common下的子项目,高效、最新、功能丰富的支持Http协议的客户端编程工具包,支持HTTP协议最新版本和建议,比JDK自带的URLConnection,更易用和灵活,发送HTTP请求变的容易,提高开发效率
- Okhttp
处理网络请求的开源项目,安卓端最火的轻量级框架,Square公司,用于代替HttpURLConnection和Apache HttpClient,拥有简洁的API、高效性能,支持多协议(HTTP/2和SPDY)
- HttpURLConnection
HttpURLConnection是Java的标准类,继承自URLConnection,用于向网站发送GET请求、POST请求,使用比较复杂,不像HttpClient容易使用
- RestTemplate、WebClient
RestTemplate是Spring提供的访问Rest服务的客户端,提供了多种便捷访问远程HTTP服务的方法,大大提高客户端的编写效率
Feign比上面集中方式更方便简洁
7.5.1、什么是Feign
Feign是Netflix开发的声明式、模板化的HTTP客户端,支持多种注解(Feign自带的注解或JAX-RS注解),可以更便捷、优雅的调用HTTP API。
Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,还整合了Ribbon和Nacos,使得Feign的使用更加方便
7.5.2、Spring Cloud Alibaba整合Feign
- 引入依赖
<!--引入openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 添加feign接口和方法
/**
* name:调用的rest的接口,所对应的服务名(注册中心的服务名)
* path:调用的rest的接口,所对应的controller的 @RequestMapping,如果controller没有指定RequestMapping,不设置就可以
*/
@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {
//声明需要调用的rest接口对应的方法,跟Mybatis的接口类似,要调用的方法,可以看做该方法的实现类,要调用的方法是什么样,这里就写成一样的接口
@RequestMapping("/reduct")
public String reduct();
}
- 调用端启动类添加注解
@EnableFeignClients
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class);
}
}
之前是使用Restemplate
调用,现在使用OpenFeign
,把Restemplate
相关的都删掉
@RestController
@RequestMapping("/order")
public class OrderController {
/*
替换RestTemplate
@Autowired
RestTemplate restTemplate;*/
//使用Openfeign
@Autowired
StockFeignService stockFeignService;
@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
//String msg=restTemplate.getForObject("http://stock-nacos/stock/reduct",String.class);
String msg = stockFeignService.reduct();
return "Hello Feign"+msg;
}
}
7.5.3、Spring Cloud OpenFeign自定义配置
- 日志配置
默认调用OpenFeign
是没有任何日志输出的,OpenFeign
提供了四种日志级别,默认是NONE
不显示
- NONE:性能最佳,适用生产,没有任何日志,默认值
- BASIC:适用于生产环境追踪问题,只记录请求方法、URL、响应状态及执行时间
- HEADERS:记录BASIC的基础上,记录请求和相应的header
- FULL:适用开发和测试环境,记录请求和相应的header、body、和元数据
- 全局配置
定义配置类,制定日志级别
/**
* 全局配置:使用 @Configuration 会将配置作用给所有服务提供方
* 局部配置: 如果只想针对某个服务,就不要加@Configuration
*/
@Configuration
public class FeiginConfig {
@Bean
public Logger.Level feignLoggerLevel(){
/**
* - NONE:性能最佳,适用生产,没有任何日志,默认值
* - BASIC:适用于生产环境追踪问题,只记录请求方法、URL、响应状态及执行时间
* - HEADERS:记录BASIC的基础上,记录请求和相应的header
* - FULL:适用开发和测试环境,记录请求和相应的header、body、和元数据
*/
return Logger.Level.FULL;
}
}
- 局部配置
和上面一样的配置类,但是不要使用@Configuration
注解,在service中指定配置类
@FeignClient(name = "product-service",path = "/product",configuration = FeiginConfig.class)
public interface ProductFeignService {
}