一、为什么要使用微服务网关
简单来说,微服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。在未加入网关时,一般上会在服务外网架设一个负载均衡,如nginx。
二、网关的优缺点
优点:
减少api请求次数
限流
缓存
统一认证
降低微服务的复杂度
支持混合通信协议(前端只和api通信,其他的由网关调用)
……
缺点:
网关需高可用,可能产生单点故障
管理复杂
三、Zuul的介绍
Zuul是Netflix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,Spring Cloud对Zuul进行了整合与增强,Zuul的主要功能是路由转发和过滤器。
Zuul基于JVM的路由器和服务器端负载均衡器。同时,Zuul的规则引擎允许规则和过滤器基本上用任何JVM语言编写,内置支持Java和Groovy。这个功能,就可以实现动态路由的功能了。当需要添加某个新的对外服务时,一般上不停机更新是通过数据缓存配置或者使用Groovy进行动态路由的添加的。
Zuul的核心一系列的过滤器:
身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
动态路由:动态地将请求路由到不同的后端集群。
压力测试:逐渐增加指向集群的流量,以了解性能。
负载分配:为每一种负载类型分配对应容量,并启用超出限定值的请求。
静态响应处理:在边缘位置直接建立部分相应,从而避免其转发到内部集群。
四、Zuul的十种常用使用方式
1、添加依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
2、application启动类添加Zuul注解
@SpringBootApplication@EnableZuulProxypublic class ZuulApplication {public static void main(String[] args) {SpringApplication.run(ZuulApplication.class, args);}}
3、十种Zuul配置方式
3.0、指定微服务路径
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:microservice-provider-user: /user/**management:security:enabled: false
3.1、忽略指定微服务
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:ignored-services: microservice-provider-user,microservice-consumer-moviemanagement:security:enabled: false
3.2、忽略所有微服务,只路由指定的微服务
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:ignored-services: '*' # 使用'*'可忽略所有微服务routes:microservice-provider-user: /user/**management:security:enabled: false
3.3、同时指定微服务的serviceId和对应路径
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。service-id: microservice-provider-userpath: /user/** # service-id对应的路径management:security:enabled: false
3.4、同时指定path和url
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:user-route: # 该配置方式中,user-route只是给路由一个名称,可以任意起名。url: http://localhost:8000/ # 指定的urlpath: /user/** # url对应的路径。management:security:enabled: false
3.5、同时指定path和URL,并且不破坏Zuul的Hystrix、Ribbon特性
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:user-route:path: /user/**service-id: microservice-provider-userribbon:eureka:enabled: false # 禁用掉ribbon的eureka使用。详见:http://cloud.spring.io/spring-cloud-static/Camden.SR3/#_example_disable_eureka_use_in_ribbonmicroservice-provider-user:ribbon:listOfServers: localhost:8000,localhost:8001management:security:enabled: false
3.6、为Zuul添加映射前缀1
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:prefix: /apistrip-prefix: falseroutes:microservice-provider-user: /user/**logging:level:com.netflix: DEBUGmanagement:security:enabled: false# 访问Zuul的/api/microservice-provider-user/1路径,请求将会被转发到microservice-provider-user的/api/1,可查看日志打印,有助于理解。
3.7、为Zuul添加映射前缀2
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:microservice-provider-user:path: /user/**strip-prefix: falselogging:level:com.netflix: DEBUGmanagement:security:enabled: false# 这样访问Zuul的/user/1路径,请求将会被转发到microservice-provider-user的/user/1,可查看日志打印,有助于理解。
3.8、忽略某些路径
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:ignoredPatterns: /**/admin/** # 忽略所有包括/admin/的路径routes:microservice-provider-user: /user/**management:security:enabled: false
3.9、本地转发
server:port: 8040spring:application:name: microservice-gateway-zuuleureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: truezuul:routes:route-name:path: /path-a/**url: forward:/path-bmanagement:security:enabled: false
加油!一起学习交流!!!





