目前升级使用以下的版本。
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom 'org.springframework.boot:spring-boot-dependencies:2.3.8.RELEASE'
mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR10'
mavenBom 'com.alibaba.cloud:spring-cloud-alibaba-dependencies:2.2.5.RELEASE'
}
}
以下内容引用:https://blog.csdn.net/weixin_39052568/article/details/106497898
发现nacos版本问题
使用 sping cloud alibaba 2.2.1和spirng cloud Hoxton.SR4发现版本不兼容,nacos 修改配置文件是可以收到修改消息但不将修改后信息注入spirng, 也就是说修改不生效,其实启动的时候就不能注入。将 sping cloud alibaba版本将至2.1.1.RELEASE就正常了。
以下是我的相关的jar 包信息
Hoxton.SR4
2.1.1.RELEASE
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
#nacos注册中心和配置中心jar包
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
# gateway网管jar包
org.springframework.cloud
spring-cloud-starter-gateway
#这边主要又来测试动态配置是否生效
org.springframework.boot
spring-boot-starter-actuator
${spring.boot.version}
配置动态的路由
在项目的resources目录创建bootstrap.yml或bootstrap.properties文件,记住必须是bootstrap文件名,因为只有bootstrap文件在springboot引导时前就会加载,application里写这些配置文件无法生效,因为之前discovery配置信息放入application配置文件中就没有问题,到了config就死活不成。
以下为bootstrap.yml文件
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: dev
discovery:
server-addr: 127.0.0.1:8848
application.yml
server:
port: 8103
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
#配置这一项可以监控gateway各个节点的信息
management:
endpoints:
web:
exposure:
include: gateway
在不设置不设置dataid情况下 nacos系统的具体dataid的设置网上很多,我这里就不说了
到这里所有的代码端的配置基本结束了,nacos的安装我这里也不说了,网上很丰富,我这里用docker简单部署了一个
下面开始测试:
properties的路由配置:
spring.cloud.gateway.routes[0].id=service-user
spring.cloud.gateway.routes[0].uri=lb://service-user
spring.cloud.gateway.routes[0].predicates[0]=Path=/user/**
spring.cloud.gateway.routes[1].id=service-goods
spring.cloud.gateway.routes[1].uri=lb://service-goods
spring.cloud.gateway.routes[1].predicates[0]=Path=/goods/**
yaml的路由配置:
spring:
cloud:
gateway:
discovery:
locator:
# 是否与服务注册于发现组件进行结合,通过 serviceId 转发到具体的服务实例
enabled: true
lowerCaseServiceId: true
routes:
- id: service-user
predicates:
- Path=/user/**
uri: lb://service-user
- id: service-goods
predicates:
- Path=/goods/**
uri: lb://service-goods
我自己写了两个节点做测试,spring.cloud.gateway.routes[0].id=service-user这一项是代表注册到nacos里的服务名称如下图
spring.cloud.gateway.routes[0].uri=lb://service-user 这一项固定写法 lb://服务名 ,当然你愿意也可以写固定连接,predicates是断言没什么好说,还有一项order我没添,默认是0
启动类代码很简单没什么说的
@EnableDiscoveryClient
@SpringBootApplication
public class KflGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(KflGatewayApplication.class, args);
}
}
访问http://127.0.0.1:8103/actuator/gateway/routes
这里看出动态路由已经生效。
访问我的两个测试节点