本文基于springboot+nacos+gateway实现,使用springboot作为基础工程,nacos作为注册中心及配置中心,gateway作为网关
项目整体使用版本号:
springboot-2.6.8
springcloud-2021.0.3
spring-cloud-alibaba-2021.0.1.0
1. Gateway网关服务:
创建普通的springboot工程,网关服务中不要添加spring-boot-starter-web
依赖:
pom依赖
<!-- gateway网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos配置中心需要使用到的bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>
<!--fegin组件 不加该依赖会出现503问题 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Feign Client for loadBalancing -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
<version>3.1.3</version>
</dependency>
yml配置
bootstrap.yml
:naocs配置中心需要的依赖,因为要优先加载,所以使用该名称yml:
spring:
application:
name: GatewayService
cloud:
nacos:
config:
server-addr: 127.0.0.1:8082
group: testGroup
name: GatewayService
file-extension: yaml
namespace: Dev
application.yml
普通yml文件配置,包含sentinel配置,nacos注册中心配置,gateway网关配置及相关服务路由配置
server:
port: 8083
spring:
application:
name: GatewayService
# 该配置用于解决 springboot使用tomcat Springcloud gateway使用netty 导致冲突,所以添加改配置,然后不添加spring-boot-starter-web依赖 网关服务就可以正常启动了
main:
web-application-type: reactive
cloud:
nacos:
server-addr: 127.0.0.1:8082
discovery:
group: testGroup
namespace: Dev
sentinel:
transport:
dashboard: 127.0.0.1:8080
gateway:
# 全局超时限制
httpclient:
connect-timeout: 1000
response-timeout: 200
routes:
- id: testService01
# 如果使用nacos作为注册中心,这里直接使用lb://服务名 非nacos uri: http://127.0.0.1:8001
uri: lb://testService01
predicates:
# - Path=/test01/**
- name: Path
args:
pattern: /test01/**
# 针对某个路由进行超时限制,配置该项,则全局配置不对该路由起作用
metadata:
response-timeout: 300
connect-timeout: 300
- id: testService02
# 如果使用nacos作为注册中心,这里直接使用lb://服务名 非nacos uri: http://127.0.0.1:8001
uri: lb://testService02
predicates:
- name: Path
args:
pattern: /test02/**
服务启动类
@SpringBootApplication
@EnableDiscoveryClient // nacos注册中心使用配置
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
大版本控制
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.8</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. 测试应用服务01:
pom依赖配置,使用nacos作为注册中心及配置中心
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
yml配置
bootstrap.yml
:naocs配置中心需要的依赖,因为要优先加载,所以使用该名称yml:
spring:
application:
name: Test-Service-01
cloud:
nacos:
config:
# 配置中心地址
server-addr: 127.0.0.1:8082
# 命名空间 可区分环境使用 dev开发环境 pro生产环境
namespace: Dev
# 配置列表 dataID前缀
name: testService01
# 配置列表 dataID后缀
file-extension: yaml
# 如果不配置该项,则使用DEFAULT_GROUP 不支持配置自动更新
# 如果配置该项,支持配置自动更新
group: testGroup
# 动态刷新功能 true开启 false关闭
refresh-enabled: true
application.yml
普通yml文件配置,包含sentinel配置,nacos注册中心配置,gateway网关配置及相关服务路由配置
server:
port: 8090
spring:
application:
name: testService01
cloud:
nacos:
server-addr: 127.0.0.1:8082
discovery:
group: testGroup
namespace: Dev
sentinel:
transport:
dashboard: 127.0.0.1:8080
启动类
@SpringBootApplication
@EnableDiscoveryClient // nacos注册中心配置
public class TestServiceDemo01Application {
public static void main(String[] args) {
SpringApplication.run(TestServiceDemo01Application.class, args);
}
}
测试方法类
@RestController
@RefreshScope // nacos配置中心动态刷新获取配置
public class TestController {
@Value("${test.val:}")
private String val;
@GetMapping("/test01/get")
public String get() throws Exception{
Thread.sleep(205);
return val;
}
}
3. nacos注册中心相关截图:
注册中心上显示的服务
网友评论