本文基于springboot+nacos+gateway實(shí)現(xiàn)生百,使用springboot作為基礎(chǔ)工程涧尿,nacos作為注冊(cè)中心及配置中心形纺,gateway作為網(wǎng)關(guān)
項(xiàng)目整體使用版本號(hào):
springboot-2.6.8
springcloud-2021.0.3
spring-cloud-alibaba-2021.0.1.0
1. Gateway網(wǎng)關(guān)服務(wù):
創(chuàng)建普通的springboot工程昭抒,網(wǎng)關(guān)服務(wù)中不要添加spring-boot-starter-web
依賴:
pom依賴
<!-- gateway網(wǎng)關(guān) -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos注冊(cè)中心 -->
<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組件 不加該依賴會(huì)出現(xiàn)503問(wèn)題 -->
<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配置中心需要的依賴瞬矩,因?yàn)橐獌?yōu)先加載茶鉴,所以使用該名稱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注冊(cè)中心配置蛤铜,gateway網(wǎng)關(guān)配置及相關(guān)服務(wù)路由配置
server:
port: 8083
spring:
application:
name: GatewayService
# 該配置用于解決 springboot使用tomcat Springcloud gateway使用netty 導(dǎo)致沖突,所以添加改配置丛肢,然后不添加spring-boot-starter-web依賴 網(wǎng)關(guān)服務(wù)就可以正常啟動(dòng)了
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:
# 全局超時(shí)限制
httpclient:
connect-timeout: 1000
response-timeout: 200
routes:
- id: testService01
# 如果使用nacos作為注冊(cè)中心围肥,這里直接使用lb://服務(wù)名 非nacos uri: http://127.0.0.1:8001
uri: lb://testService01
predicates:
# - Path=/test01/**
- name: Path
args:
pattern: /test01/**
# 針對(duì)某個(gè)路由進(jìn)行超時(shí)限制,配置該項(xiàng)蜂怎,則全局配置不對(duì)該路由起作用
metadata:
response-timeout: 300
connect-timeout: 300
- id: testService02
# 如果使用nacos作為注冊(cè)中心穆刻,這里直接使用lb://服務(wù)名 非nacos uri: http://127.0.0.1:8001
uri: lb://testService02
predicates:
- name: Path
args:
pattern: /test02/**
服務(wù)啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient // nacos注冊(cè)中心使用配置
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. 測(cè)試應(yīng)用服務(wù)01:
pom依賴配置,使用nacos作為注冊(cè)中心及配置中心
<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配置中心需要的依賴杠步,因?yàn)橐獌?yōu)先加載氢伟,所以使用該名稱yml:
spring:
application:
name: Test-Service-01
cloud:
nacos:
config:
# 配置中心地址
server-addr: 127.0.0.1:8082
# 命名空間 可區(qū)分環(huán)境使用 dev開(kāi)發(fā)環(huán)境 pro生產(chǎn)環(huán)境
namespace: Dev
# 配置列表 dataID前綴
name: testService01
# 配置列表 dataID后綴
file-extension: yaml
# 如果不配置該項(xiàng),則使用DEFAULT_GROUP 不支持配置自動(dòng)更新
# 如果配置該項(xiàng)幽歼,支持配置自動(dòng)更新
group: testGroup
# 動(dòng)態(tài)刷新功能 true開(kāi)啟 false關(guān)閉
refresh-enabled: true
application.yml
普通yml文件配置朵锣,包含sentinel配置,nacos注冊(cè)中心配置甸私,gateway網(wǎng)關(guān)配置及相關(guān)服務(wù)路由配置
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
啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient // nacos注冊(cè)中心配置
public class TestServiceDemo01Application {
public static void main(String[] args) {
SpringApplication.run(TestServiceDemo01Application.class, args);
}
}
測(cè)試方法類
@RestController
@RefreshScope // nacos配置中心動(dòng)態(tài)刷新獲取配置
public class TestController {
@Value("${test.val:}")
private String val;
@GetMapping("/test01/get")
public String get() throws Exception{
Thread.sleep(205);
return val;
}
}
3. nacos注冊(cè)中心相關(guān)截圖:
注冊(cè)中心上顯示的服務(wù)