Zuul 服务网关

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超时

You must be logged in to post a comment