网关

    • 概述
    • path路由
    • host路由
    • query路由
    • 多个 Gateway 配置
    • 其他

    概述

    如下是一个正常的 gateway 配置。

    • name 设置路由的名称
    • uri 设置路由目标网址,可以配置多个 uri,多个 uri 用英文逗号(,) 隔开,当有多个 uri 的时候,系统会 随机 使用其中一个去访问
    • enable 是否启用该路由
    • sentinelEnable 是否启用 sentinel 限流功能
    • sentinelBlockPage 若该路由被限流后,网页自动跳转到哪个网址
    • sentinelBlockJsonMap 若该路由被限流后,自动渲染的 jsonMap,若 sentinelBlockPage 已经配置,则 sentinelBlockJsonMap 配置无效
    • proxyReadTimeout 发生路由后,默认的请求超时时间,默认为 10 秒
    • proxyConnectTimeout 发生路由后,默认的连接超时时间,默认为 5 秒
    • proxyContentType 发生路由后,返回给浏览器的 http-content-type,默认为:text/html;charset=utf-8
    • interceptors 网关拦截器,一般用于进行鉴权等功能,配置类名,多个拦截器用英文逗号隔开,拦截器必须实现 GatewayInterceptor 接口
    • loadBalanceStrategy 负载均衡策略,当配置了多个 uri 的时候,可以通过此策略对 uri 进行获取

    Path 路由一般是最常用的路由之一,是根据域名之后的路径进行路由的,Jboot 对 Path 路由提供了 4 中方式:

    1、pathEquals

    1. jboot.gateway.uri = http://youdomain:8080
    2. jboot.gateway.enable = true
    3. jboot.gateway.pathEquals = /user

    当用户访问 www.xxx.com/user 的时候,自动路由到 http://youdomain:8080/user,但是当用户请求 www.xxx.com/user/other 的时候不会进行路由。

    2、pathContains

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.pathContains = /user

    当 path 中,只要存在 /user 就会匹配到该路由,比如 www.xxx.com/user/other 或者 www.xxx.com/other/user/xxx 都会匹配到。

    3、pathStartsWith

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.pathStartsWith = /user

    当 path 中,只要以 /user 开头就会匹配到该路由,比如 www.xxx.com/user/other ,但是 www.xxx.com/other/user/xxx 不会匹配到,因为它是以 /other 开头的。

    当 path 中,只要以 /user 结束就会匹配到该路由,比如 www.xxx.com/other/user ,但是 www.xxx.com/user/other 不会匹配到,因为它是以 /other 结束的。

    Host 路由

    Host 路由是根据域名进行路由的,Jboot 对 Host 路由提供了 4 中方式:

    1、hostEquals

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.hostEquals = xxx.xxx.com

    当用户访问 xxx.xxx.com/user/xx 的时候,自动路由到 http://youdomain:8080/user/xx,但是当用户请求 www.xxx.com/user/xxx 的时候不会进行路由。

    2、hostContains

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.hostContains = xxx.xxx.com

    在 Host 中,只要存在 xxx.xxx.com 就会匹配到该路由,比如 aaa.bbb.xxx.xxx.com/user/other 会自动路由到 http://youdomain:8080/user/other

    3、hostStartsWith

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.hostStartsWith = xxx

    在 Host 中,只要以 xxx 开头就会匹配到该路由,比如 xxx.xxx.com/user/other ,但是 www.xxx.com/other/user/xxx 不会匹配到,因为它的域名(host)是以 xxx 开头的。

    在 Host 中,只要以 com 结束就会匹配到该路由,比如 www.xxx.com/other/user ,但是 www.xxx.org/user/other 不会匹配到,因为它的域名是以 org 结束的。

    根据 get 请求的参数进行路由,注意 post 请求参数不会路由。

    1、queryEquals

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.queryEquals = aaa:bbb

    以上配置中,如果用户访问 www.xxx.com/controller?aaa=bbb 会自动路由到 http://youdomain:8080/controller?aaa=bbb ,但是如果用户访问 www.xxx.com/controller?aaa=ccc不会路由。

    2、queryContains

    1. jboot.gateway.name = name
    2. jboot.gateway.uri = http://youdomain:8080
    3. jboot.gateway.enable = true
    4. jboot.gateway.queryContains = aaa

    以上配置中,如果用户访问 www.xxx.com/controller?aaa=bbb 会自动路由到 http://youdomain:8080/controller?aaa=bbb ,或者用户访问 www.xxx.com/controller?aaa=ccc 也会路由到 http://youdomain:8080/controller?aaa=ccc,因为 query 都包含了 aaa=** 的请求,但是如果用户访问 www.xxx.com/controller?other=aaa不会路由。

    多个 Gateway 配置

    1. jboot.gateway.aaa.name = name
    2. jboot.gateway.aaa.uri = http://youdomain:8080
    3. jboot.gateway.aaa.enable = true
    4. jboot.gateway.aaa.sentinelEnable = false
    5. jboot.gateway.aaa.sentinelBlockPage = /block
    6. jboot.gateway.aaa.proxyReadTimeout = 10000
    7. jboot.gateway.aaa.proxyConnectTimeout = 5000
    8. jboot.gateway.aaa.proxyContentType = text/html;charset=utf-8
    9. jboot.gateway.aaa.interceptors = com.xxx.Interceptor1,com.xxx.Interceptor2
    10. jboot.gateway.aaa.pathEquals = /path
    11. jboot.gateway.aaa.pathContains = /path
    12. jboot.gateway.aaa.pathStartsWith = /path
    13. jboot.gateway.aaa.pathEndswith = /path
    14. jboot.gateway.aaa.hostEquals = xxx.com
    15. jboot.gateway.aaa.hostContains = xxx.com
    16. jboot.gateway.aaa.hostStartsWith = xxx.com
    17. jboot.gateway.aaa.hostEndswith = xxx.com
    18. jboot.gateway.aaa.queryContains = aa,bb
    19. jboot.gateway.bbb.name = name
    20. jboot.gateway.bbb.uri = http://youdomain:8080
    21. jboot.gateway.bbb.enable = true
    22. jboot.gateway.bbb.sentinelEnable = false
    23. jboot.gateway.bbb.sentinelBlockPage = /block
    24. jboot.gateway.bbb.proxyReadTimeout = 10000
    25. jboot.gateway.bbb.proxyConnectTimeout = 5000
    26. jboot.gateway.bbb.proxyContentType = text/html;charset=utf-8
    27. jboot.gateway.bbb.interceptors = com.xxx.Interceptor1,com.xxx.Interceptor2
    28. jboot.gateway.bbb.pathEquals = /path
    29. jboot.gateway.bbb.pathContains = /path
    30. jboot.gateway.bbb.pathStartsWith = /path
    31. jboot.gateway.bbb.pathEndswith = /path
    32. jboot.gateway.bbb.hostEquals = xxx.com
    33. jboot.gateway.bbb.hostContains = xxx.com
    34. jboot.gateway.bbb.hostStartsWith = xxx.com
    35. jboot.gateway.bbb.hostEndswith = xxx.com
    36. jboot.gateway.bbb.queryEquals = aa:bb,cc:dd
    37. jboot.gateway.bbb.queryContains = aa,bb
    38. jboot.gateway.xxx.name = name
    39. jboot.gateway.xxx.uri = http://youdomain:8080
    40. jboot.gateway.xxx.enable = true
    41. jboot.gateway.xxx.sentinelEnable = false
    42. jboot.gateway.xxx.sentinelBlockPage = /block
    43. jboot.gateway.xxx.proxyReadTimeout = 10000
    44. jboot.gateway.xxx.proxyConnectTimeout = 5000
    45. jboot.gateway.xxx.proxyContentType = text/html;charset=utf-8
    46. jboot.gateway.xxx.interceptors = com.xxx.Interceptor1,com.xxx.Interceptor2
    47. jboot.gateway.xxx.pathEquals = /path
    48. jboot.gateway.xxx.pathContains = /path
    49. jboot.gateway.xxx.pathStartsWith = /path
    50. jboot.gateway.xxx.pathEndswith = /path
    51. jboot.gateway.xxx.hostEquals = xxx.com
    52. jboot.gateway.xxx.hostContains = xxx.com
    53. jboot.gateway.xxx.hostStartsWith = xxx.com
    54. jboot.gateway.xxx.hostEndswith = xxx.com
    55. jboot.gateway.xxx.queryEquals = aa:bb,cc:dd
    56. jboot.gateway.xxx.queryContains = aa,bb

    当配置中,如果一个内容存在多个值的时候,需要用英文逗号(,)隔开。

    比如:

    其他同理。