采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在更新gateway路由定义,前面已经把所有之前的路由定义都给清除掉了,为什么后面还是调用的私有的update方法,而不是add方法呢? 私有的update方法里面也是做delete操作的啊。
哦,我知道了,清除掉的是gateway中的路由定义,调用updateByRouteDefinition方法是先删除nacos中的路由定义,然后再添加新的进去,最后同步给gateway
同学你好:
你这里的理解其实不对,我们在 Gateway 中的所有操作都不会去直接修改 Nacos 中的任何数据,这是不合理的。Nacos 中的数据应该是我们通过 Nacos Web 页面手动修改,否则,你通过代码修改是没办法保证数据可靠性的。
这里,我之所以会调用 update 方法,也是为了二次保证清理所有旧的路由定义,当然,我们的代码里面,也不存在其他的线程更新的情况,可以直接去 add;可以自己试试自己的想法是不是可行的。
我的实现也是典型的冗余设计,如果觉得没必要,可以直接去 save。
Nacos web页面添加配置,DynamicRouteServiceImplByNacos 类读取配置 写入到 routeDefinitionWriter 里面是一个map,通过事件机制同步给gateway。 然后给nacos的配置服务添加一个监听器,监听nacos的配置变动,一旦有变动就先清除routeDefinitionWriter中旧的路由定义信息,再清除gateway中旧的路由定义信息,最后再把nacos中新的配置信息给添加进去。 不知道这样理解对不对 那监听器可以一直监听nacos的配置吗?
这个理解是对的,监听器就是做监听工作的,这是 Spring 里面的监听器模式的实现。
非常感谢!
登录后可查看更多问答,登录/注册
从架构设计到开发实践,手把手实现
1.0k 9
1.2k 8
1.5k 6
964 5
812 5