编辑 | blame | 历史 | 原始文档

前言

  • gateway默认会将服务名作为路由地址,比如服务名为blade-desk,那么我们就可以通过http://gateway/blade-desk/** 进行请求转发
  • 但是有些时候,我们需要对网关进行额外的配置,比如做个反向代理、转发服务名改为其他名称
  • 这种情况,一般需要前往bootstrap.yml文件进行配置,可是这样带来的问题是每次修改都需要重新打包,可见这并不是一个可以采纳的解决方案
  • 有没有可以不重新打包,不重启就能设置网关配置项的方案?动态网关的方案由此而来。

说明

  • BladeX采用了基于Nacos定制轻量级、高拓展性的动态网关方案
  • 配置文件将保存在Nacos中,若网关配置有改动,直接修改发布便可即时刷新

如何操作

  1. 找到对应的配置文件
    ![](../images/screenshot_1558153565139.png)
  2. 到nacos添加对应配置(**如果有其他同名的服务注册,需要把order的值改成-1或者更小,否则无法转发到本地**)
    ![](../images/screenshot_1558153623743.png)
  3. 启动blade-gateway以及blade-desk
    ![](../images/screenshot_1558153670138.png)
  4. 访问 http://localhost/example
  5. 发现反向代理配置成功
    ![](../images/screenshot_1558153706360.png)
  6. 这时候我们先访问下 http://localhost/test , 发现返回的是404
    ![](../images/screenshot_1558153745500.png)
  7. 前往nacos编辑配置,并保存
    ![](../images/screenshot_1558153784322.png)
  8. 不用重启gateway,再次访问 http://localhost/test 发现动态网关配置已经生效
    ![](../images/screenshot_1558153833033.png)

团队协作之动态网关

  • 相信很多公司都会有共同的烦恼,那就是多个团队注册了多个同名的服务至公共的nacos服务器,这时候比如 blade-desk 服务就注册有七八个,gateway调用时会采用负载均衡算法,按照规则调用其中的某个服务
  • 那么问题来了,如果其中某个人想对 blade-desk 进行调试,就会碰到问题,因为不知道什么时候负载均衡才能调用到自己本地的服务
  • 这时候,动态网关便可以完美解决这类问题,不需要改代码只需要改动nacos即可满足需求

    详细步骤

  1. 首先修改自身 gateway 以及需要调试的服务名,一般我们会以自己的花名或英文名进行后缀命名区分。这样区分后,便不会与他人冲突,我们可以用gateway的反代指向属于自己的服务
    ![](../images/screenshot_1558154939347.png)
    ![](../images/screenshot_1558154957509.png)
  2. 当然,为了防止gateway的配置与他人冲突,我们也需要创建一份属于自己的gateway配置,到nacos创建 blade-gateway-chill-dev.json
    ![](../images/screenshot_1558156459350.png)
  3. 重启发现带有自己英文名的gateway以及desk已经注册成功
    ![](../images/screenshot_1558155738647.png)
  4. 测试新配置的反代已经成功
    ![](../images/screenshot_1558155664223.png)
  5. 测试desk原生服务名,发现成功
    ![](../images/screenshot_1558155782522.png)
  6. 但是返回是未授权,我们先在nacos配置将其放行,因为是授权放行生成的拦截器,所以有改动的时候,需要重启gateway
    ![](../images/screenshot_1558156177456.png)
  7. 放行后发现接口返回成功
    ![](../images/screenshot_1558156310000.png)
  8. 将地址改为反代的通用地址,发现接口也正常返回,并且原生的blade-desk服务并没有开启,说明动态网关的配置成功。
    ![](../images/screenshot_1558156485275.png)
    ![](../images/screenshot_1558156511800.png)

结尾语

  • 动态网关非常实用,并且有更多的配置等待大家前往探索~
  • 如此一来,借助动态网关+自定义服务,即可完美解决多团队共同注册服务的问题
  • BladeX封装的动态网关参数为官方的RouteDefiintion类属性,所以并没有额外的学习成本,一切按照官方配置即可
    ![](../images/screenshot_1558156618483.png)
  • 具体实现逻辑可参考:http://springcloud.cn/view/412
  • 本地开发及服务与docker部署的服务相连通,可参考:https://blog.whsir.com/post-2809.html