nacos gateway动态路由怎么用
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍nacos gateway动态路由怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!nacos gateway动态路由说明:本次测试使用的gateway是2.
千家信息网最后更新 2026年11月02日nacos gateway动态路由怎么用
这篇文章主要介绍nacos gateway动态路由怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
nacos gateway动态路由
说明:本次测试使用的gateway是2.2.2.RELEASE版本,其他版本可能存在不同
一、引入本次测试需要的pom依赖
org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba fastjson 1.2.47
二、配置文件设置(*配置文件不生效的把名字改为bootstrap.yml)
server: port: 8200 spring: application: name: lc-gateway cloud: nacos: discovery: #注册中心地址 server-addr: 106.12.146.239:8848 config: server-addr: 106.12.146.239:8848 # 配置中心-指定命名空间 namespace: bb79a8c4-e4e1-4a27-bceb-0810f278b5aa # 指定配置文件后缀 file-extension: yaml #配置组 group: DEFAULT_GROUP #配置dateId data-id: lc-gateway #获取配置超时时间 timeout: 5000 gateway: #设置超时时间默认 httpclient: connect-timeout: 1000 response-timeout: 5s
ps:这里集成了nacos配置中心想了解详情请移步spring cloud集成nacos配置中心
三、动态路由实现
package com.lc.api.gateway.config; import com.alibaba.fastjson.JSONObject;import com.alibaba.nacos.api.NacosFactory;import com.alibaba.nacos.api.config.ConfigService;import com.alibaba.nacos.api.config.listener.Listener;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.cloud.gateway.event.RefreshRoutesEvent;import org.springframework.cloud.gateway.route.RouteDefinition;import org.springframework.cloud.gateway.route.RouteDefinitionWriter;import org.springframework.context.ApplicationEventPublisher;import org.springframework.context.ApplicationEventPublisherAware;import org.springframework.stereotype.Service;import reactor.core.publisher.Mono; import javax.annotation.PostConstruct;import java.util.ArrayList;import java.util.List;import java.util.Properties;import java.util.concurrent.Executor; /** * 动态路由,可以通过获取Bean才做该类,提供增删改查已经发布功能 * * @Author: lc * @Date: 2020/7/8 15:49 */@Servicepublic class DynamicRouteConfig implements ApplicationEventPublisherAware { private static final Logger logger = LoggerFactory.getLogger(DynamicRouteConfig.class); @Autowired private RouteDefinitionWriter routedefinitionWriter; private ApplicationEventPublisher publisher; @Value("${spring.cloud.nacos.config.data-id}") private String dataId; @Value("${spring.cloud.nacos.config.group}") private String group; @Value("${spring.cloud.nacos.config.server-addr}") private String serverAddr; @Value("${spring.cloud.nacos.config.namespace}") private String namespace; @Value("${spring.cloud.nacos.config.timeout}") private long timeout; private static final List ROUTE_LIST = new ArrayList<>(); @PostConstruct public void dynamicRouteByNacosListener() { try { Properties prop = new Properties(); prop.put("serverAddr", serverAddr); prop.put("namespace", namespace); ConfigService config = NacosFactory.createConfigService(prop); String content = config.getConfig(dataId, group, timeout); publisher(content); config.addListener(dataId, group, new Listener() { @Override public void receiveConfigInfo(String config) { publisher(config); } @Override public Executor getExecutor() { return null; } }); } catch (Exception e) { e.printStackTrace(); } } /** * 增加路由 * * @param def * @return */ public Boolean addRoute(RouteDefinition def) { try { routedefinitionWriter.save(Mono.just(def)).subscribe(); ROUTE_LIST.add(def.getId()); } catch (Exception e) { e.printStackTrace(); } return true; } /** * 删除路由 * * @return */ public Boolean clearRoute() { for (String id : ROUTE_LIST) { routedefinitionWriter.delete(Mono.just(id)).subscribe(); } ROUTE_LIST.clear(); return Boolean.FALSE; } /** * 发布路由 */ private void publisher(String config) { clearRoute(); try { logger.info("Start updating dynamic routing ...."); List routeDefinitionList = JSONObject.parseArray(config, RouteDefinition.class); for (RouteDefinition route : routeDefinitionList) { logger.info(route.toString()); addRoute(route); } publisher.publishEvent(new RefreshRoutesEvent(this.routedefinitionWriter)); logger.info("update completed "); } catch (Exception e) { logger.error("Failed to update routing information", e); e.printStackTrace(); } } @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { publisher = applicationEventPublisher; } } 四、nacos配置中心设置
1.说明
2.新建一个网关配置
3. 添加配置格式如下
这里我就不注释了大家应该都能看懂
[ { "filters": [ { "args": { "parts": "1" }, "name": "StripPrefix" } ], "id": "authent1", "order": -1, "predicates": [ { "args": { "pattern": "/authent/**" }, "name": "Path" } ], "uri": "lb://lc-authenticate" }]五、测试
gateway网关相关配置
创建,使用initilizer,
Group:com.atguigu.gulimall
Artifact: gulimall-gateway
package:com.atguigu.gulimall.gateway
搜索gateway选中。
pom.xml里加上common依赖, 修改jdk版本
在启动类中添加注解@EeableDiscoveryClient
配置nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.application.name=gulimall-gatewayserver.port=88
bootstrap.properties 填写配置中心地址
spring.application.name=gulimall-gatewayspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.namespace=ab66aff2-0bd5-4f80-8a68-760d6ff7d96d
nacos里创建命名空间gateway
然后在命名空间里创建文件guilmall-gateway.yml
spring: application: name: gulimall-gateway
在主类中屏蔽数据源
在项目里创建application.yml
spring: cloud: gateway: routes: - id: after_route uri: https://www.xiaomi.com predicates: - Query=url,xiaomi# 若参数等于断言 则跳转到指定的uri
运行结果
以上是"nacos gateway动态路由怎么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
配置
路由
动态
文件
地址
版本
空间
测试
内容
时间
篇文章
网关
不同
价值
兴趣
功能
参数
可以通过
名字
后缀
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
互联网金融监管科技数据
工业互联网科技新基建
深圳互联网科技公司
互联网金融 科技金融
凡科互联网科技
九亚互联网科技
时间互联网络科技
中国互联网金融科技基金
中国科技互联网公司收入
互联网科技热点资讯
互联网对科技的发展
湖南一路畅行互联网科技
朱啸虎曾投资哪些互联网科技企业
互联网科技新闻
互联网界的黑科技
玉溪新华互联网科技怎么选
亚光科技低轨卫星互联网
上海互联网科技园景观
现代科技的标志之一的互联网
河南真二互联网科技有限公司
深圳科技互联网
万易互联网科技
奔汉互联网科技
太原新华互联网科技学校怎么样
来此购互联网科技有限公司
互联网在线教育科技创业
高科技互联网发展前景如何
江苏互联网智能科技软件
唯美互联网科技