请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

更新gateway路由定义

在更新gateway路由定义,前面已经把所有之前的路由定义都给清除掉了,为什么后面还是调用的私有的update方法,而不是add方法呢?
私有的update方法里面也是做delete操作的啊。

哦,我知道了,清除掉的是gateway中的路由定义,调用updateByRouteDefinition方法是先删除nacos中的路由定义,然后再添加新的进去,最后同步给gateway

正在回答

1回答

同学你好:

    你这里的理解其实不对,我们在 Gateway 中的所有操作都不会去直接修改 Nacos 中的任何数据,这是不合理的。Nacos 中的数据应该是我们通过 Nacos Web 页面手动修改,否则,你通过代码修改是没办法保证数据可靠性的。

    这里,我之所以会调用 update 方法,也是为了二次保证清理所有旧的路由定义,当然,我们的代码里面,也不存在其他的线程更新的情况,可以直接去 add;可以自己试试自己的想法是不是可行的。

    我的实现也是典型的冗余设计,如果觉得没必要,可以直接去 save。

1 回复 有任何疑惑可以回复我~
  • 提问者 无心铁憨憨 #1
    Nacos web页面添加配置,DynamicRouteServiceImplByNacos 类读取配置 写入到 routeDefinitionWriter 里面是一个map,通过事件机制同步给gateway。
    
    然后给nacos的配置服务添加一个监听器,监听nacos的配置变动,一旦有变动就先清除routeDefinitionWriter中旧的路由定义信息,再清除gateway中旧的路由定义信息,最后再把nacos中新的配置信息给添加进去。 不知道这样理解对不对
    
    那监听器可以一直监听nacos的配置吗?
    回复 有任何疑惑可以回复我~ 2021-07-21 21:40:33
  • 张勤一 回复 提问者 无心铁憨憨 #2
    这个理解是对的,监听器就是做监听工作的,这是 Spring 里面的监听器模式的实现。
    回复 有任何疑惑可以回复我~ 2021-07-21 21:42:47
  • 提问者 无心铁憨憨 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-07-21 21:48:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信