Spring cloud Gateway整合Nacos配置中心 JSON格式 实现动态路由与令牌桶限流 2024

如题所述

安装Nacos这个就不详细介绍了

如果有疑问或描述不准确,欢迎留言,我会尽力解答

首先,我们来看依赖,这里我使用的是gradle

Nacos将discovery和config分为boot和cloud,具体用途暂时不清楚,通常我们使用boot,而对于网关,我们使用cloud

下面是依赖引入的部分

接下来,编写application.yml

不配置Group的原因是,一旦配置了,服务和配置引用都将指向同Group下的服务

例如,如果网关的discovery.group组是DEV,那么服务也只会指向DEV@Service

如果另一个服务默认组是DEFAULT_GROUP,那么网关依然会指向DEV@Service,而不是DEFAULT_GROUP@Service

这就导致了不同Group的服务无法互通,无法使用

---------

注意:不要使用默认的public命名空间,否则将无法获取到配置

因此,请创建一个自己的命名空间

Nacos新建配置

配置的Data ID需要与网关的application.name=Service-Gateway属性保持一致,配置格式也是json

Nacos配置文件内容

我发现其他博主将根元素设置为JSONArray,这样会导致Nacos配置同步时出现错误,因为Nacos无法解析JSONArray,这是不正确的。根节点应该是JSONObject,否则会导致错误

parse data from Nacos error,dataId:Service-Gateway,data:你的配置文件内容

正确的配置文件格式如下

其中属性对应如下

id:没有特定含义,只要不重复即可

uri:路由目标,为以http://开始的完整域名+端口,如果以lb://开头,则指向同服务下的指定服务名,例如我的另一个服务名是Plugin-Service,因此写为"uri":"lb://Plugin-Service"

predicates:路径匹配条件,args中写多个key:value代表匹配多个路径,key任意,value写路径

filters:过滤器,这里我写了一个令牌桶限流,仅用于测试,可以不写

然后发布配置,回来继续编写路由代码

ServiceApiApplication

编写Nacos的ConfigService的Bean

GatewayConfigServiceConfig

接着编写用来添加和更新路由规则的类

DynamicRouteManager

接着编写配置文件监听器

NacosDynamicRouteListener

@RefreshScop这个注解不能少,否则可能导致路由管理类的publisher.publishEvent(new RefreshRoutesEvent(this));卡住

..

然后是令牌桶限流

IpAddressKeyResolver

大致就是这样,启动一下项目,如果没有报错,应该就是成功了

查看主动打印的日志,应该是可以了

然后查看nacos服务列表,有网关的服务了

接下来启动我们的Plugin-Service服务,可以看到也注册到nacos了

记住,正式环境中,服务要比网关先上线

..

然后还记得配置文件中的uri吗?lb表示路由到此服务名,对应的

接下来访问Plugin-Service的接口进行测试,通过网关的端口访问

可以看到已经正常通过网关访问

踩了不少坑,特此记录
温馨提示:内容为网友见解,仅供参考
无其他回答

Spring cloud Gateway整合Nacos配置中心 JSON格式 实现动态路由与令牌...
predicates:路径匹配条件,args中写多个key:value代表匹配多个路径,key任意,value写路径 filters:过滤器,这里我写了一个令牌桶限流,仅用于测试,可以不写 然后发布配置,回来继续编写路由代码 ServiceApiApplication 编写Nacos的ConfigService的Bean GatewayConfigServiceConfig 接着编写用来添加和更新路由规则...

SpringCloud Gateway的使用 + Nacos动态路由
构建SpringCloud Gateway服务的过程包括:首先,创建一个新的微服务模块,依赖于SpringCloud Alibaba的版本。配置方面,需要在启动类和application.yml中指定Gateway的Web应用类型为reactive,并通过IP路由或服务名称来指定服务目标。通过Nacos,动态路由可以实现服务添加时无需重启,只需在Nacos配置中心发布新路由,...

springboot集成Gateway & Nacos「再来一刀」
它基于Spring Framework 5和Spring Boot 2.0,集成Hystrix断路器以确保服务稳定性,同时利用Spring Cloud DiscoveryClient实现服务注册与发现。其Predicates和Filters功能使得路由策略编写更加灵活,提供了动态路由、限流和路径重写等高级功能。在实际开发中,Gateway常与Nacos这样的注册中心协同工作。例如,我们可以...

gateway网关配合nacos做动态路由
gateway的动态路由可以配置在nacos的配置中心上,gateway启动的时候来读取配置,对各个请求进行路由 配置文件如下所示 server:port:9537 spring:application:name: cloud-alibaba-gateway cloud:nacos:discovery:server-addr: localhost:8848 config:server-addr: localhost:8848 file-extension: json group: DEFA...

快速搭建一个网关服务,动态路由、鉴权看完就会(含流程图)
Nacos结合gateway-server实现动态路由,首先部署Nacos服务,使用Docker或本地启动源码皆可,具体操作参考官方文档。Nacos配置中,groupId采用网关服务名称,dataId为“routes”,配置格式以json形式呈现,需理解在json中的写法与yaml配置的一致性。实现动态路由的关键在于Nacos配置监听机制,当配置发生更改时,执行...

SpringCloudGateway在转发请求时的两种负载均衡的方式
那么,对应gateway的application.yaml配置如下:spring:cloud:gateway:#设置与服务注册发现组件结合,这样可以采用服务名的路由策略discovery:locator:enabled:true#配置路由规则routes:#采用自定义路由ID(有固定用法,不同的id有不同的功能,详见:https:\/\/cloud.spring.io\/spring-cloud-gateway\/2.0.x\/...

SpringCloud集成Mybatis-Plus+Nacos实现动态配置多数据源
SpringCloud集成Mybatis-Plus与Nacos实现动态配置多数据源在项目中,我们使用了以下几个依赖版本:com.baomidou的dynamic-datasource-spring-boot-starter: 4.2.0com.baomidou的mybatis-plus-boot-starter: 3.5.3.2基于Spring Boot的父依赖:org.springframework.boot的spring-boot-starter-parent: 2.3....

Dubbo想要个网关怎么办?试试整合Spring Cloud Gateway
在实际操作中,需要在pom.xml中定义全局依赖,然后创建dubbo-api和web-dubbo或rest-dubbo项目,分别定义接口和服务实现,并配置Spring Boot和Dubbo的相关参数。对于web-dubbo项目,需要使用Dubbo的dubbo协议,而rest-dubbo则使用rest协议。同时,还需创建Spring Cloud Gateway工程,定义路由策略并进行测试。具体...

...Spring Cloud Gateway + Oauth2 实现统一认证和鉴权!
OAuth2 Server工程创建并注册到Nacos,配置数据库表如oauth_client_details, oauth_access_token等 集成Spring Cloud相关依赖,配置数据源、注册中心等 4. 整合Spring Cloud Gateway创建网关服务,实现请求转发至auth-server 配置网关路由,使用Nacos进行服务发现 测试网关转发,验证认证流程 5. 鉴权模式应用将...

springbootcloud组件
SpringCloud内置Zuul1.x Zuul1.x核心实现是Servlet,采用同步方式通信 Zuul2.x基于NettyServer,提供异步通信 认证和安全 性能监测 动态路由 负载卸载 静态资源处理 压力测试 SpringCloudGateway,是Spring“亲儿子” SpringCloudGateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式 Gateway基于Spring5.0与Spring...

相似回答
大家正在搜