nacos gateway动态路由怎么用
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍nacos gateway动态路由怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!nacos gateway动态路由说明:本次测试使用的gateway是2.
千家信息网最后更新 2025年01月21日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 ListROUTE_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安全错误
数据库的锁怎样保障安全
rip打印软件开发
时代网络技术服务
数据库系统安全设置
乡镇国土空间规划数据库标准
0基础自学软件开发看什么书
如何给服务器设置远程连接
广州红极互联网科技有限公司北京
计算机网络安全论文的文献
网络安全法解读10分钟
畅游天下网络技术公司
喻衣鑫 服务器
网络安全预防报告
数据库中为什么采用视图
下列属于云数据库的是
数据库生成二维码软件
公司网站软件开发费用摊销
工业企业空间信息数据库信息稿
ios验证服务器
全景教育网络安全竞赛
分组层级关系数据库
咸阳软件开发平均价格
湖南戴尔服务器虚拟化系统
dns 服务器2020年
苏州服务器模组
元数据管理服务器
2核4g服务器价位
从服务器获取数据库路径
南京软件开发怎么收费
凌云软件开发
dns服务器坏了能换吗