当前位置:首页 > wifi设置知识 > 正文内容

借助Nacos完成网关路由动态配置、灰度发布、服务优雅上下线,这样来排查下

秋天2024年02月19日 10:02:52wifi设置知识103
本文将带您深入了解借助Nacos完成网关路由动态配置、灰度发布、服务优雅上下线 的各个方面,包括WIFI设置相关的内容。同时,我们还会介绍一些与此相关的,希望能为您提供帮助。

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

背景

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

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

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

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

针对以上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 | {}", JSON.toJSONString(gatewayRouteDefinitions)); } catch (Exception e) { e.printStackTrace(); } } /** * 清空所有路由 */ private void clearRoute() { for(String id : ROUTE_LIST) { this.routeDefinitionWriter.delete(Mono.just(id)).subscribe(); } ROUTE_LIST.clear(); } /** * 添加单条路由信息 * param definition RouteDefinition */ private void addRoute(RouteDefinition definition) { routeDefinitionWriter.save(Mono.just(definition)).subscribe(); ROUTE_LIST.add(definition.getId()); } /** * 发布路由表变更事件 */ private void publish() { this.applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this.routeDefinitionWriter)); } }

配置文件yml

nacos: group: DEFAULT_GROUP dataId: gateway-outer-nacos-beta namespace: beta

Nacos控制台配置路由信息

路由转发JSON

具体JSON配置如下:注意my-service为转发服务注册到Nacos的服务名

[{ "id": "service", "order": 0, "predicates": [{ "args": { "pattern": "/service/**" }, "name": "Path" }], "filters":[{ "args": { "_genkey_0": "1" }, "name": "StripPrefix" }], "uri": "lb://my-service" }]

转发服务注册到Nacos注册中心

第一步:引入Nacos注册中心和spring-cloud依赖

2.1.4.RELEASE com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config ${alibaba.nacos.version} com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery ${alibaba.nacos.version} org.springframework.cloud spring-cloud-dependencies Greenwich.SR6 pom import

第二步:SpringBootApplication增加服务发现注解 EnableDiscoveryClient

SpringBootApplication EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

第三步:增加bootstrap.yml 注册服务中心名称,网关负载转发

spring: application: name: my-service

第四步:配置文件增加Nacos注册中心配置地址

http://192.168.x.1:8848/nacos/index.html 为后台登陆管理界面

spring: cloud: nacos: config: server-addr: 192.168.x.1:8848,192.168.x.2:8848,192.168.x.3:8848 namespace: beta # 命名空间进行环境隔离 discovery: server-addr: 192.168.x.1:8848,192.168.x.2:8848,192.168.x.3:8848 namespace: beta # 命名空间进行环境隔离

流量灰度,Nacos权重设置

首先,需要在网关项目增加负载均衡策略,权重设置才会生效,代码如下:

Configuration public class Configuration { Bean Scope(value="prototype") public IRule loadBalanceRule(){ return new NacosRule(); } }

接下来就可以在Nacos控制台界面进行权重设置,完成流量倾斜转发了。

注册服务列表

服务详情操作页

服务流量转发权重设置

在服务滚动发布过程中,可以通过点击服务下线按钮,停止正在上线服务的转发,避免因服务重启造成的数据问题。以上就是网关(SpringCloud Gateway)结合Nacos完成网关路由动态配置、灰度发布、服务优雅上下线等功能。

不断分享开发过程用到的技术和面试经常被问到的问题,如果您也对IT技术比较感兴趣可以「关注」我,让我们共同学习,共同进步!

~优化路由器和WiFi网络将大大提高你的上网体验,让你畅快地享受工作和娱乐。

扫描二维码推送至手机访问。

版权声明:本文由路由设置网发布,如需转载请注明出处。

本文链接:https://www.shoulian.org/luyou/post/146485.html

分享给朋友:

“借助Nacos完成网关路由动态配置、灰度发布、服务优雅上下线,这样来排查下” 的相关文章

终端路由器电脑怎么连接

终端路由器电脑怎么连接

本篇文章给大家谈谈终端路由器电脑怎么连接,以及路由器一端连接电脑对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文内容目录一览: 1、家用台式电脑路由器怎么插线啊???详细点??急急急 2、路由器怎么连接电脑 3、路由器怎么连接电脑? 4、电脑怎么连接路由器 电脑连接路由器的教...

重置后怎么配置路由器

重置后怎么配置路由器

今天给各位分享重置后怎么配置路由器的知识,其中也会对重置后怎么配置路由器上网进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站 本文内容目录一览: 1、如何重置无线路由器,重置之后怎么设置? 2、不小心重置路由器后怎么设置 3、路由器重置后要如何设置 4、路由器恢复出厂设置后怎么重...

路由器的射频怎么调

路由器的射频怎么调

今天和朋友们分享路由器的射频怎么调相关的知识,相信大家通过本文介绍也能对无线路由器射频有自已的收获和理解。自己轻松搞问题。本文内容目录一览: 1、无线路由器频段如何修改 2、ap射频模式设置多少 3、ac怎么设置 ac如何设置 4、路由器怎么把5GHz改成2.4GHz,在哪改 5、路...

路由器端口线怎么连

路由器端口线怎么连

有很多朋友不知道路由器端口线怎么连要如何操作,今天为大家整理了很多路由器连接网线口相关的答案,组成一篇内容丰富的文章,希望能到您 本文内容目录一览: 1、路由器怎么插线? 2、无线路由器网线连哪个口? 3、路由器怎么连接网线 4、路由器怎么连 5、路由器插口连接图的正确插法 6、...

公司内网怎么登录路由器

公司内网怎么登录路由器

本篇文章给大家谈谈公司内网怎么登录路由器,以及公司内网接无线路由器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文内容目录一览: 1、公司内网的IP固定,怎样连接无线路由? 2、公司内网怎么设置无线路由器 3、单位局域网设置无线路由器方法 4、如何进入单位局域网路由器 公司...

怎么验证路由器插口好坏

怎么验证路由器插口好坏

今天给各位分享怎么验证路由器插口好坏的知识,其中也会对路由器怎么检查好坏进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站 本文内容目录一览: 1、怎样判断无线路由lan口有没有坏掉 2、怎么检查路由器是否好坏 3、如何测试有线路由器的wan口的好坏 怎样判断无线路由lan口有没有坏...