定制app开发Spring Cloud Gateway--配置路由的方法

原文网址:

简介

说明

        本文介绍Spring Cloud Gateway定制app开发配置路由的方法。

路由概述

        定制app开发路由是配置的基本组成模块,和Zuul定制app开发的路由配置模块类似。一个Route定制app开发模块由一个 ID,一个目标 URI,定制app开发一组断言和一组过滤器定义。定制app开发如果断言为真,则路由匹配,目标URI会被访问。

粉丝福利:很多粉丝私信问我有没有Java的面试及PDF书籍等资料,我整理了一下,包含:真实面试题汇总、简历模板、PDF书籍、PPT模板等。这些是我自己也在用的资料,面试题是面试官问到我的问题的整理,其他资料也是我自用的,真正实用、靠谱。资料可以从这里免费获取:

方案1:使用配置文件

配置文件是:application.yml。

法1:通过服务名实现动态路由

        默认情况下Gatway会根据注册中心注册的服务列表, 以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。

application.yml示例

  1. spring:
  2. application:
  3. name: cloud-gateway-gateway
  4. cloud:
  5. gateway:
  6. discovery:
  7. locator:
  8. # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
  9. enabled: true
  10. # 用小写的请求路径的服务名匹配服务。默认为false(大写)。(因为服务注册时服务名被转成大写)
  11. lowerCaseServiceId: true

假如直接请求应用时的url是:localhost:8080/findUser(假设应用端口为8080)

则这样配置后请求网关的url是:localhost:9000/user/findUser(假设网关服务端口为9000,应用服务名为user)

法2:指定路径转发路由

application.yml示例

  1. spring:
  2. application:
  3. name: futureGateway
  4. cloud:
  5. gateway:
  6. routes:
  7. - id: accountServiceRouter # 路由ID,保持唯一
  8. uri: lb://accountService # 目标服务地址
  9. predicates: # 断言(路由条件)
  10. - Path=/account/**
  11. - id: accountServiceRouter2 # 测试过滤器
  12. uri: lb://accountService # 目标服务地址
  13. predicates: # 断言(路由条件)
  14. - Path=/client/account/**
  15. filters: # 过滤器
  16. - StripPrefix=1 # 截去路径中的/client,剩余部分和uri拼接作为地址,数字代表要截去的位数
  17. - id: emailServiceRouter
  18. uri: http://127.0.0.1:8201
  19. predicates:
  20. - Path=/email/**

id

        在一个网关中,id要是唯一的,命名的时候方便区分即可。

uri

        请求转发的目标地址,可以以http、https、lb和ws等为前缀。例如:

  1. http方式 :
    1. uri: http://localhost:8001/
  2. lb(注册中心中服务名字)方式 :
    1. uri: lb://cloud-payment-service
    2. 以lb为前缀的时候表示这是一个动态路由,GateWay会根据lb://后面的服务名称从服务注册中心中获取服务实例,然后将请求转发到具体的服务地址,实现负载均衡。
  3. websocket方式 :
    1. uri: ws://localhost:8001/ 

predicates

        断言。通过断言可以设置一组路由条件,可以根据请求方式、请求头、请求参数、请求主机和请求路径等断言进行设置,通常我们使用请求路径进行设置,只要请求地址和Path中的地址匹配,就会将请求转发,多个路径以逗号分隔,例如:

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: path_route
  6. uri: https://example.org
  7. predicates:
  8. - Path=/red/{segment},/blue/{segment}

filters

        过滤器。使用过滤器可以在网关转发请求前和接收响应后执行一些操作,例如鉴权、限流等,例如StripPrefix可以去掉客户端请求地址中的若干路径,然后将剩余的路径和uri中的地址拼接后转发。

        Filter分两种,GatewayFilter和GlobalFilter,GatewayFilter应用在单个路由上,GlobalFilter应用在全局路由上。因为GlobalFilter可以使所有的路由都生效,所以可以用来实现统一的鉴权、日志记录等功能。

方案2:代码配置

示例配置

  1. @Configuration
  2. public class GatewayConfig {
  3. @Bean
  4. public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
  5. // 路由构造器
  6. RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
  7. // 设置路径
  8. routes.route("baidu_news_guonei_routh", r -> {
  9. return r.path("/guonei").uri("http://news.baidu.com/guonei");
  10. });
  11. routes.route("baidu_news_guoji_routh", r -> {
  12. return r.path("/guoji").uri("http://news.baidu.com/guoji");
  13. });
  14. return routes.build();
  15. }
  16. }

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发