1. 路由组成结构

Gateway中可以定义很多个Route,一个Route就是一套包含完整转发规则的路由,主要有三部分组成

gateway 路由 mysql gateway 路由转发原理_spring cloud

  • 断言集合:断言是路由器处理的第一个环节,他是路由的匹配规则,他决定了一个网络请求是否可以匹配给当前路径来处理,之所以他是一个集合是因为我们可以个一个路由添加多个断言,当每个断言都配置成功了才算是过了路由这一关
  • 过滤器集合:如果请求通过了前面断言的匹配,表明被路由正式接手了,结下就需要经过过滤器了,比如说权限验证,如果验证不通过就设置为Status Code为403并中断操作
  • URI:如果请求顺利通过过滤器的处理,那就要走到最后一步了,也就是转发请求(URI事统一资源标识符)

2. 负载均衡

对最后一步寻址来说,如果采用基于Eureka的服务发现机制,那么杂Gateway的转发过程中可以采用服务注册后的名字了访问,后台会借助Ribbon实现负载均衡(可以为某个服务指定具体的负载均衡策略),配置方式如下:

lb://FEIGN-SERVER,lb就是代表Ribbon作为LoadBalancer

3. 路由的工作流程

gateway 路由 mysql gateway 路由转发原理_spring cloud_02

  • Predicate Handler(断言):首先获取所有的路由(配置的routes全集),然后依次循环每个Route,把应该请求与Route中配置的所有断言进行匹配,如果当前Route所有断言都验证通过,Predicate Handler就选定当前的路由,这个模式典型的责任链
  • Filter Handler;在前一步选中路由后,在具体处理过程中,不仅当前Route中定义的过滤器会生效,我们在项目中添加的全局过滤器(Global Filter)也会一同参与,Pre Filter和Post Filter是指过滤器的作用阶段
  • 寻址:这一步将会把请求转发到URI指定的地址,在发送请求之前,所有Pre类型的过滤器都将被执行,而Post过滤器会在调用请求返回之后起作用