Zuul 服务网关
常用网关方案
Nginx+Lua
Kong(商业)
Tyk(go开发)
Spring Cloud Zuul
Zuul 4种过滤器
前置Pre 限流(google的令牌桶,spring-cloud-zuul-ratelimit),鉴权,参数校验
路由 Route
后置Post 统计,日志
错误Error
将多个Zuul节点注册到Eureka Server实现高可用
Nginx和Zuul混搭
配制
#自定义路由
#自定义路由
zuul:
routes:
myProduct:
# 路由到 /myProduct/** ->> /product
path: /myProduct/**
serviceId: product
# 敏感头过滤,设置传递参数带cookie
sensitiveHeaders:
# 简单写法
# product: /myProduct/**
# 禁止路由外部访问
ignored-patterns:
- /product/product/listForOrder
- /myProduct/product/listForOrder
# - /**/product/listForOrder
#所有路由规则地址
management:
#打开/actuator监控端口 /actuator/routes路由列表 /actuator/routes/details路由详情
endpoints:
web:
exposure:
include: '*'
#打开health
endpoint:
health:
show-details: ALWAYS
#关闭权限认证 默认访问需权限
security:
enabled: false
跨域解决
1. 在Nginx中解决
1. 在被调用的类或方法上增加注解@CrossOrigin
1. 在ZULL中使用CorsConfig配制文件增加CorsFilter过滤器
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
//是否支持Cookie跨域
config.setAllowCredentials(true);
//允许的原始域,你自己的域名 http:www.a.com
config.setAllowedOrigins(Arrays.asList("*"));
//允许的头
config.setAllowedHeaders(Arrays.asList("*"));
//允许的方法GET POST ....
config.setAllowedMethods(Arrays.asList("*"));
//缓存时间,在这时间内的同一请求不再进行跨域检查
config.setMaxAge(300L);
//将配制文件注册
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
ERROR:com.netflix.zuul.exception.ZuulException: Hystrix Readed time out
这个错误是应为zuul的默认超时时间比较小,我们配置下zuul的超时时间,因zuul启用了ribbon的负载均衡,还需要设置ribbon的超时时间,注意ribbon的超时时间要小于zuul超时时间 。
zuul:
host:
connect-timeout-millis: 15000 #HTTP连接超时要比Hystrix的大
socket-timeout-millis: 60000 #socket超时