nacos gateway动态路由怎么用
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍nacos gateway动态路由怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!nacos gateway动态路由说明:本次测试使用的gateway是2.
千家信息网最后更新 2025年11月09日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安全错误
数据库的锁怎样保障安全
互联网 助力农业科技创新
灵龙网络技术有限公司 电话
vb 数据库实例
图书馆的公共网络安全么
网络安全综合治理权力清单
物联网软件开发工程师岗位说明
创建索引导致数据库无法使用
东营智慧社区软件开发公司
广州炎阳软件开发有限公司
天翼关系型数据库使用指南
阿里云建立数据库服务器
飞鹰服务器
区块链宠物app软件开发系统
金山区项目数据库服务商服务费
sql 是什么数据库系统
奈曼网络安全宣传
服务器管理费用明细
营业软件开发
塔式服务器配什么机柜
数据库技术与数据结构
微信小游戏服务器在哪里查看
西湖区苹果软件开发
什么是主键数据库
win7 服务器配置
软件开发pm的工作内容
数据库连接会话作用
sci finder 数据库
河北多功能软件开发怎么样
网络安全工作经验和心得体会
校园网络安全实施