争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

借助Nacos完成网关路由动态设置、灰度公布、服务优雅上下线

时间:2024/11/26作者:未知来源:争怎路由网人气:

随着业务和架构的发展,微服务的开发部署方式已经变成了如今技术发展的趋势,而在微服务流量入口控制上基本都是通过网关来实现的。网关的作用:路由转发、熔断、限流、安全认证、日志监控等,在前面也发布过一篇关于的文章,大家感兴趣的话可以去了解下网关的基本介绍。

背景

目前我们的服务流量入口已统一由网关进行转发,路由信息定义在配置文件中,但是这种方式有一个缺点就是修改路由信息必须重启服务才能生效。网关作为支付全部流量的入口,需要保证其高可用,所以需要做到不重启服务而修改路由信息,现结合Nacos去实现配置动态路由,同时需要转发服务统一注册到Nacos注册中心,网关直接在注册中心中选择机器进行转发。下面介绍具体改造的代码。

网关接入Nacos动态刷新网关路由配置表

如果要实现动态路由配置,主要需要做到2点,

  1. Nacos能够监听到客户端前台配置文件的修改;
  2. 将修改的配置文件变更新到网关路由中;

针对以上2点,我们需要通过代码来监听Nacos配置文件修改变化,同时利用Spring事件发布将配置文件变更信息动态刷新到路由配置表中,核心代码如下:

@Component @Slf4j public class NacosDynamicRouteService implements ApplicationEventPublisherAware { @Value("${spring.cloud.nacos.config.server-addr}") private String serverAddr; @Value("${nacos.group}") private String group; @Value("${nacos.dataId}") private String routeConfigDataId; @Value("${nacos.namespace}") private String namespace; @Resource private RouteDefinitionWriter routeDefinitionWriter; private ApplicationEventPublisher applicationEventPublisher; private static final List ROUTE_LIST = new ArrayList<>(); @Override public void setApplicationEventPublisher(@NotNull ApplicationEventPublisher applicationEventPublisher) { this.applicationEventPublisher = applicationEventPublisher; } @PostConstruct public void dynamicRouteListener() { try { Properties properties = new Properties(); properties.put("serverAddr", serverAddr); properties.put("namespace", namespace); ConfigService configService = NacosFactory.createConfigService(properties); // 程序首次启动, 并加载初始化路由配置 String initConfigInfo = configService.getConfig(routeConfigDataId, group, 5000); addAndPublishBatchRoute(initConfigInfo); configService.addListener(routeConfigDataId, group, new Listener() { @Override public void receiveConfigInfo(String configInfo) { addAndPublishBatchRoute(configInfo); } @Override public Executor getExecutor() { return null; } }); } catch (Exception e) { e.printStackTrace(); } } /** * 批量 添加及发布 路由 * @param configInfo 配置文件字符串, 必须为json array格式 */ private void addAndPublishBatchRoute(String configInfo) { try { clearRoute(); List gatewayRouteDefinitions = JSONObject.parseArray(configInfo, RouteDefinition.class); for (RouteDefinition routeDefinition : gatewayRouteDefinitions) { addRoute(routeDefinition); } publish(); log.info(">>>>>>>>>>>>>>>>>Nacos Dynamic config gateway route finished

关键词:借助Nacos完成网关路由动态设置、灰度公布、服务优雅上下线




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版