SpringCloudAlibaba之—Gateway路由网关(一)

471 阅读2分钟

这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

在SpringCloud微服务体系中,有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul, 那就是SpringCloud Gateway

GateWay的核心概念

1.路由

网关的基本构建模块,它是由ID、目标URl、断言集合和过滤器集合定义, 如果集合断言为真,则匹配路由。

2.断言

Predicate: 参照Java8的新特性Predicate。这允许开发人员匹配HTTP请求中的任何内容,比如头或参数。

Gateway提供了很多Predicated供我们选择

1.例如时间匹配

spring:  
    cloud:    
        gateway:      
            routes:      
            - id: after_route        
              uri: http://www.google.com        
              predicates:        
              - After=2021-11-11T14:33:47.789+08:00

这个路由规则会在东8区的2021-11-11 14:33:47后,将请求都转跳到google。

2.例如Cookie匹配

spring: 
    cloud:    
        gateway:  
            routes:      
            - id: cookie_route       
              uri: http://www.google.com        
              predicates:        
              - Cookie=cookiename, cookievalue

路由匹配请求存在cookie名为cookiename,cookie内容匹配cookievalue的,将请求转发到google。

3.例如Header匹配

spring:  
    cloud:    
        gateway:     
            routes:      
            - id: header_route        
              uri: http://www.google.com        
              predicates:        
              - Header=X-Request-Id, \d+

路由匹配存在名为X-Request-Id,内容为数字的header的请求,将请求转发到google。

3.过滤器

Filter: 可以在发送下游请求之前或之后修改请求和响应。

1.能够增加请求的Header的Filter

spring:  
	cloud:    
		gateway:   
        	routes: 
            - id: add_request_header_route  
              uri: http://www.google.com  
              filters:
              - AddRequestHeader=X-Request-Foo, Bar
              

对匹配的请求,会额外添加X-Request-Foo:Bar的header。

2.能够增加请求参数的 Filter

spring:  
	cloud:  
    	gateway:   
        	routes:      
        	- id: add_request_parameter_route     
              uri: http://www.google.com     
              filters:       
              - AddRequestParameter=foo, bar
              

3.增加响应Header的Filter


spring:  
	cloud:   
    	gateway:  
        	routes:      
        	- id: add_request_header_route    
              uri: http://www.google.com     
              filters:        
              - AddResponseHeader=X-Response-Foo, Bar
              

对匹配的请求,响应返回时会额外添加X-Response-Foo:Bar的header返回。

小总结

核心逻辑就是路由转发,执行过滤器链。

1.请求发送到网关,经由分发器将请求匹配到相应的HandlerMapping

2.请求和处理器之间有一个映射,路由到网关处理程序,即Web Handler

3.执行特定的请求过滤器链

但其实网关的功能远远不止这些,网关还能做到统一的熔断,限流,认证,日志监控等,但是核心功能还是路由转发,因此不要在网关上耗时太多,应该快速转发到后端服务上,所以GateWay采用的是WebFlux,加快了整体的响应速度。