是什么
zuul 路由配置
zuul:
#ignored-services: microservicecloud-dept #忽略指定服务的访问路径
prefix: /caisebei # 指定前缀
ignored-services: "*" # 忽略所有的服务 (多个微服务之间使用逗号隔开,再配置routes 就是配置指定的微服务可以被代理)
routes:
microservice-provider-user: /user/** #自定义微服务的访问路径
mydept.serviceId: microservicecloud-dept # 设置单个微服务
mydept.path: /mydept/**
配置了之后访问时就是 http://myzuul.com:9527/caisebei/mydept/dept/get/2
http:域名:ip/prefix/routes.path/ restAPI
同时指定微服务的serviceId 和对应的路径。例如
zuul:
routes:
user-route: #该配置方式中,user-route 只是给路由一个名称,可以任意起名。
service-id : micorservice-provider-user
path: /user/** #service-id 对应的路径
同时指定path 和url
zuul:
routes:
user-route: #该配置方式中,user-route 只是给路由一个名称,可以任意起名。
url : http://locahost:8000
path: /user/** #service-id 对应的路径
这样就可以将 /user/** 映射到http://localhost:8000/**
需要注意的是,使用这种方式配置的路由不会作为HystrixCommand 执行,同时也不能使用Ribbon 来负载均衡多个URL ,下例可以解决该问题
zuul:
routes:
user-route: #该配置方式中,user-route 只是给路由一个名称,可以任意起名。
path: /user/** #service-id 对应的路径
service-id : microservice-provider-user
ribbon :
eureka:
enabled: false # 为Ribbon 禁用Eureka
microservice-provider-user:
ribbon:
listOfServers: localhost:8000, localhost:8001
这样可以即指定rul 和path 又不破坏Zuul 的Hystrix 与Ribbon 特性了
忽略某些路径
上述有怎么忽略掉某个/某些服务,有时可能需要更细粒度的控制,想让zuul 代理某个微服务,同时又想保护该微服务的某些敏感词,可以使用ignored-Patterns 指定忽略的正则:
zuul:
ignoredPatterns: /**/admin/**
routes:
microservice-provider-user : /user/**
可以通过com.netflix 日志级别设为DEBUG 这样zuul 会打印转发的细节
logging:
level:
com.netflix: DEBUG
Zuul 的安全与Header
敏感header
同一个系统中的服务之间共享Header ,不过应该避免一些敏感的Header 外泄。
zuul:
routes:
microservice-provider-user:
path: /users/**
sensitive-headers: Cookie,Set-Cookie,Authorization
url : https://downstream
也可以使用zuul.sensitive-headers 全局指定敏感Header,例如:
zuul:
sensitive-headers: Cookie,Set-Cookie,Authorization #默认设置的为Cookie, Set-Cookie,Authorization 需要注意的是使用了上一种敏感配置方式,全局配置的方式会被覆盖
忽略Header:
zuul:
ignored-headers : Header1, Header2 # 这两个header 不会传播到其他的微服务中(上述的敏感header 最终会添加到忽略的header 中)
Zuul 上传文件
对于小文件(1M以内)无需任何处理,对于大文件需要为上传路径添加/zuul 前缀
如果zuul 使用了Ribbon做负载均衡,那么对于超大的文件(例如500M),需要超时设置:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:60000
ribbon:
ConnectTimeout:3000
ReadTimeout:60000
使用zuul 上传过大的文件的时候需要加上前缀/zuul
可以在linux 中使用curl -F "file=@src.zip" 192.168.115.1:8040/zuul/microservice-file-upload/upload 上传文件进行服务器相关的测试.
Zuul 的过滤器:
PRE: 在请求被路由之前调用(身份认证,集群中选择请求的微服务,记录调试信息)
ROUTING: 这种过滤器将请求路由到微服务(用于构建发送给微服务的请求,并使用HttpClient 或Ribbon 请求)
POST: 路由到微服务后执行(为响应添加标准的HTTP Header , 收集统计信息和指标,将响应从微服务发送给客户端)
ERROR: 在其他阶段发生错误的时候执行该过滤器
禁用过滤器:
zuul.<SimpleClassName>.<filterType>.disable=true 即可禁用相应的过滤器
标注: 感谢 周立 微服务实战相关书籍