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

我想请问一下,Spring cloud Gateway整合Nacos配置中心 JSON格式 实现动态路由与令牌桶限流 2024
最新回答
避讳真心

2024-12-03 01:48:51

安装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的接口进行测试,通过网关的端口访问

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

踩了不少坑,特此记录