有一点上篇文章忘了 讲述,nacos的加载优先级别最高。服务启动优先拉去配置信息。所以上一篇服务搭建我没有讲述在nacos 中心创建的配置文件可以看到服务端口和注册中心都在配置文件中配置化
属性信息
上一篇我们讲了如何搭建网关zuul 服务。实现了基本的转发功能。这篇文章我们要讲述zuul过滤器的使用。和三个参数的使用
sensitiveHeaders 属性关键字声明:Spring Cloud微服务实战 书中意思为放行字段。而小编在官方文档查看到是忽略不放行的意思。请注意此处,看过Spring Cloud微服务实战同学可以用小编实例代码印证
- ribbon-isolation-strategy
- 隔离机制 Spring Cloud 默认的隔离机制hystrix 去做限流、熔断、隔离。一个是基于信号量。一个是基于线程池去完成
- 信号量模式
在该模式下,接收请求和执行下游依赖在同一个线程内完成,不存在线程上下文切换所带来的性能开销。默认信号量模式 - 线程池
在该模式下,用户请求会被提交到各自的线程池中执行,把执行每个下游服务的线程分离,从而达到资源隔离的作用。当线程池来不及处理并且请求队列塞满时,新进来的请求将快速失败,可以避免依赖问题扩散。
- 信号量模式
- 隔离机制 Spring Cloud 默认的隔离机制hystrix 去做限流、熔断、隔离。一个是基于信号量。一个是基于线程池去完成
- ignored-services
- 忽略指定的服务
- ignored—patterns
- 忽略指定的url 路径
- ignored-headers
- 忽略指定的header 头部信息
- sensitiveHeaders
- 字段比较敏感,不希望传递给下游微服务。 设置空没有要忽略的敏感字段。全部传给下游服务
在上面ignored-headers 和 sensitiveHeaders 职责是有重叠的部分。其实他们是有着关系存在的。sensitiveHeaders的内容会最终合并到ignored-headers内。
验证一下 sensitiveHeaders 字段设置全区忽略 X-ABC
消费者服务 sensitiveHeaders 指定忽略 X-ABC,Authorization
服务提供者转发不做任何调整在服务提供者 和 服务消费者 服务上。都创建一个 UrlFilter 拦截器先设置一下 zuul的yml文件
zuul:
host:
# 目标主机的最大连接数,默认值为200
max-total-connections: 500
# 每个主机的初始连接数,默认值为20
max-per-route-connections: 100
routes:
discovery-server:
path: /server/**
serviceId: cloud-discovery-server
client-common:
path: /client/**
serviceId: cloud-discovery-client
sensitiveHeaders: X-ABC,X-Foo
# 所有路由的默认Hystrix隔离模式(ExecutionIsolationStrategy)为SEMAPHORE。如果此隔离模式是首选,则zuul.ribbonIsolationStrategy可以更改为THREAD
ribbon-isolation-strategy: thread
# 这个属性意思,* 忽略未指定的服务列表 有具体服务名称 忽略指定的服务
ignored-services: "*"
# 忽略指定的url 路径
ignored—patterns:
# 忽略指定的header 头部信息
ignored-headers: Authorization
# 字段比较敏感,不希望传递给下游微服务。 设置空没有要忽略的敏感字段。全部传给下游服务
sensitive-headers: X-ABC
ribbon:
eager-load:
# 强制加载,不设置会进行懒加载。spring 第一次请求会非常慢
enabled: true
package com.xian.cloud.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Enumeration;
/**
* <Description>
*
* @author [email protected]
* @version 1.0
* @createDate 2019/10/29 13:57
*/
@WebFilter(filterName = "test",urlPatterns = "/*")
@Slf4j
public class UrlFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.warn("UrlFilter init.......");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Enumeration<String> attributeNames = servletRequest.getAttributeNames();
HttpServletRequest req = (HttpServletRequest) servletRequest;
String requestURI = req.getRequestURI();
String header = req.getHeader("X-Foo");
String abc = req.getHeader("X-ABC");
String au