@llryiop/avatar-boot-cli 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/exam-question-generate-api.md +163 -0
- package/package.json +1 -1
- package/src/prompts.js +3 -3
- package/src/transform.js +1 -1
- package/templates/.claude/skills/avatar-boot-starter-feign/README.md +243 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +47 -219
- package/templates/.claude/skills/avatar-boot-starter-feign/references//345/212/237/350/203/275/350/257/246/350/247/243.md +65 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +75 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/references//351/205/215/347/275/256/345/217/202/350/200/203.md +70 -0
- package/templates/.claude/skills/avatar-boot-starter-job/README.md +437 -0
- package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +35 -414
- package/templates/.claude/skills/avatar-boot-starter-job/references//345/270/270/350/247/201/351/227/256/351/242/230.md +55 -0
- package/templates/.claude/skills/avatar-boot-starter-job/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +124 -0
- package/templates/.claude/skills/avatar-boot-starter-job/references//347/233/221/346/216/247/346/214/207/346/240/207.md +72 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/README.md +580 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +36 -560
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/234/200/344/275/263/345/256/236/350/267/265.md +43 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//346/240/270/345/277/203/345/212/237/350/203/275.md +117 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/references//351/205/215/347/275/256/345/217/202/350/200/203.md +54 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/README.md +572 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +40 -550
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/256/236/344/275/223/344/270/216/345/212/237/350/203/275.md +96 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/346/225/260/346/215/256/346/272/220.md +91 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/references//351/253/230/347/272/247/347/211/271/346/200/247/344/270/216/351/205/215/347/275/256.md +59 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/README.md +901 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +40 -879
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/212/237/350/203/275/344/275/277/347/224/250.md +134 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +96 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/references//346/225/205/351/232/234/346/216/222/346/237/245.md +64 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/README.md +594 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +52 -570
- package/templates/.claude/skills/avatar-boot-starter-oss/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +77 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/references//346/240/270/345/277/203/345/212/237/350/203/275.md +94 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/references//350/247/204/350/214/203/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +61 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/README.md +586 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +42 -566
- package/templates/.claude/skills/avatar-boot-starter-redis/references//345/277/253/351/200/237/346/216/245/345/205/245/344/270/216/351/205/215/347/275/256.md +78 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/references//346/225/260/346/215/256/346/223/215/344/275/234.md +111 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/references//351/253/230/347/272/247/345/212/237/350/203/275.md +90 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/README.md +662 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +48 -640
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//346/240/270/345/277/203/345/212/237/350/203/275.md +101 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/205/215/347/275/256/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.md +44 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/references//351/253/230/347/272/247/347/211/271/346/200/247.md +71 -0
- package/templates/.claude/skills/avatar-boot-starter-web/README.md +1007 -0
- package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +150 -1003
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-LogInfo/346/263/250/350/247/243.md +75 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/345/205/250/345/261/200/345/274/202/345/270/270/345/244/204/347/220/206.md +90 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/214/207/346/240/207/347/233/221/346/216/247.md +74 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/346/227/245/345/277/227/344/275/223/347/263/273.md +73 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/212/237/350/203/275-/350/257/267/346/261/202/344/270/212/344/270/213/346/226/207.md +77 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//345/277/253/351/200/237/346/216/245/345/205/245/346/214/207/345/215/227.md +52 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//346/263/250/346/204/217/344/272/213/351/241/271.md +68 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//350/207/252/345/256/232/344/271/211/346/211/251/345/261/225/346/214/207/345/215/227.md +107 -0
- package/templates/.claude/skills/avatar-boot-starter-web/references//351/205/215/347/275/256/345/217/202/350/200/203.md +107 -0
- package/templates/.claude/skills/crud-generator/SKILL.md +133 -64
- package/templates/.claude/skills/database-design/README.md +207 -0
- package/templates/.claude/skills/database-design/SKILL.md +469 -82
- package/templates/.claude/skills/database-design/references//345/221/275/345/220/215/350/247/204/350/214/203.md +232 -0
- package/templates/.claude/skills/database-design/references//345/255/227/346/256/265/347/261/273/345/236/213/350/247/204/350/214/203.md +400 -0
- package/templates/.claude/skills/database-design/references//347/264/242/345/274/225/350/247/204/350/214/203.md +506 -0
- package/templates/avatar-scaffold-api/pom.xml +0 -5
- package/templates/avatar-scaffold-service/pom.xml +25 -87
- package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +3 -5
- package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +2 -2
- package/templates/pom.xml +9 -18
|
@@ -1,901 +1,62 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: avatar-boot-nacos
|
|
3
|
-
description: Avatar Boot Nacos
|
|
2
|
+
name: avatar-boot-starter-nacos
|
|
3
|
+
description: Avatar Boot Nacos 模块使用指南。当用户询问服务注册发现、动态配置管理、spring.config.import、配置热更新、多环境隔离、共享配置,或需要接入 avatar-boot-starter-nacos 时触发。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Avatar Boot Nacos
|
|
6
|
+
# Avatar Boot Starter Nacos 使用指南
|
|
7
7
|
|
|
8
|
-
Avatar Boot
|
|
8
|
+
你是 Avatar Boot Nacos 模块的使用顾问与开发助手。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 交互流程(必须遵守)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
**每次被触发时,先通过 AskUserQuestion 工具询问用户意图:**
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
问题:"您好!我是 Avatar Boot Nacos 模块助手,请问您需要哪方面的帮助?"
|
|
15
|
+
选项:
|
|
16
|
+
1. **快速接入** - 添加依赖、配置 spring.config.import(必须)
|
|
17
|
+
2. **服务注册与发现** - 自动注册、LoadBalanced 服务调用
|
|
18
|
+
3. **动态配置管理** - @Value/@ConfigurationProperties + @RefreshScope 热更新
|
|
19
|
+
4. **共享配置** - 多服务共享配置、扩展配置
|
|
20
|
+
5. **故障排查** - 注册失败、配置加载失败、配置不刷新
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
**根据用户选择,用 Read 工具按下方「文档读取路由」加载对应文档,然后给出具体指导。**
|
|
19
23
|
|
|
20
|
-
**application.yml** (主配置):
|
|
21
|
-
```yaml
|
|
22
|
-
spring:
|
|
23
|
-
application:
|
|
24
|
-
name: my-service # 必填:服务名称
|
|
25
|
-
|
|
26
|
-
server:
|
|
27
|
-
port: 8080
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**application-dev.yml** (环境配置):
|
|
31
|
-
```yaml
|
|
32
|
-
spring:
|
|
33
|
-
config:
|
|
34
|
-
import:
|
|
35
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
36
|
-
|
|
37
|
-
cloud:
|
|
38
|
-
nacos:
|
|
39
|
-
server-addr: 127.0.0.1:8848 # 必填:Nacos 服务器地址
|
|
40
|
-
namespace: ${NACOS_NAMESPACE:dev}
|
|
41
|
-
username: ${NACOS_USERNAME:nacos}
|
|
42
|
-
password: ${NACOS_PASSWORD:nacos}
|
|
43
|
-
|
|
44
|
-
config:
|
|
45
|
-
enabled: true
|
|
46
|
-
file-extension: yaml
|
|
47
|
-
group: DEFAULT_GROUP
|
|
48
|
-
|
|
49
|
-
discovery:
|
|
50
|
-
enabled: true
|
|
51
|
-
register-enabled: true
|
|
52
|
-
ephemeral: true
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 添加依赖
|
|
56
|
-
|
|
57
|
-
```xml
|
|
58
|
-
<dependency>
|
|
59
|
-
<groupId>com.iflytek.avatar.boot</groupId>
|
|
60
|
-
<artifactId>avatar-boot-starter-nacos</artifactId>
|
|
61
|
-
</dependency>
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
版本由 `avatar-boot-dependency` BOM 管理 - 永远不要显式指定版本。
|
|
65
|
-
|
|
66
|
-
## 配置方式
|
|
67
|
-
|
|
68
|
-
### ⚠️ Spring Cloud Alibaba 2023.x 唯一推荐方式
|
|
69
|
-
|
|
70
|
-
**必须使用 `spring.config.import`**,这是 Spring Cloud Alibaba 2023.x 的强制要求。
|
|
71
|
-
|
|
72
|
-
#### 正确的配置格式
|
|
73
|
-
|
|
74
|
-
```yaml
|
|
75
|
-
spring:
|
|
76
|
-
application:
|
|
77
|
-
name: avatar-demo-service
|
|
78
|
-
|
|
79
|
-
config:
|
|
80
|
-
import:
|
|
81
|
-
# 应用配置
|
|
82
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
83
|
-
# 共享配置
|
|
84
|
-
- optional:nacos:common-database.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
85
|
-
- optional:nacos:common-redis.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
86
|
-
|
|
87
|
-
cloud:
|
|
88
|
-
nacos:
|
|
89
|
-
server-addr: 127.0.0.1:8848
|
|
90
|
-
namespace: ${NACOS_NAMESPACE:}
|
|
91
|
-
username: ${NACOS_USERNAME:nacos}
|
|
92
|
-
password: ${NACOS_PASSWORD:nacos}
|
|
93
|
-
|
|
94
|
-
config:
|
|
95
|
-
enabled: true
|
|
96
|
-
file-extension: yaml
|
|
97
|
-
group: DEFAULT_GROUP
|
|
98
|
-
|
|
99
|
-
discovery:
|
|
100
|
-
enabled: true
|
|
101
|
-
register-enabled: true
|
|
102
|
-
ephemeral: true
|
|
103
|
-
group: DEFAULT_GROUP
|
|
104
|
-
metadata:
|
|
105
|
-
version: 1.0.0
|
|
106
|
-
environment: ${spring.profiles.active:dev}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**格式说明**:
|
|
110
|
-
- `optional:` - 配置不存在时不会导致启动失败(推荐)
|
|
111
|
-
- `nacos:` - 指定配置源类型
|
|
112
|
-
- `{dataId}` - 配置文件的 Data ID,可使用变量 `${spring.application.name}`
|
|
113
|
-
- `?group=XXX` - 指定配置分组(必需)
|
|
114
|
-
- `&refreshEnabled=true` - 启用配置自动刷新
|
|
115
|
-
|
|
116
|
-
#### ❌ 常见错误
|
|
117
|
-
|
|
118
|
-
```yaml
|
|
119
|
-
# 错误 1: 缺少 spring.config.import
|
|
120
|
-
spring:
|
|
121
|
-
cloud:
|
|
122
|
-
nacos:
|
|
123
|
-
config:
|
|
124
|
-
enabled: true # ❌ 会报错: No spring.config.import property has been defined
|
|
125
|
-
|
|
126
|
-
# 错误 2: 空的 dataId
|
|
127
|
-
spring:
|
|
128
|
-
config:
|
|
129
|
-
import:
|
|
130
|
-
- "nacos:" # ❌ 会报错: dataId must be specified
|
|
131
|
-
|
|
132
|
-
# 错误 3: 变量未解析
|
|
133
|
-
spring:
|
|
134
|
-
config:
|
|
135
|
-
import:
|
|
136
|
-
- "optional:nacos:${spring.applicyaml" # ❌ 缺少 group 参数
|
|
137
|
-
|
|
138
|
-
# 错误 4: 位置错误
|
|
139
|
-
spring:
|
|
140
|
-
cloud:
|
|
141
|
-
nacos:
|
|
142
|
-
config:
|
|
143
|
-
import: # ❌ 应该在 spring.config.import,不是这里
|
|
144
|
-
- "nacos:xxx"
|
|
145
|
-
|
|
146
|
-
# 错误 5: spring.application.name 定义位置错误
|
|
147
|
-
spring:
|
|
148
|
-
config:
|
|
149
|
-
activate:
|
|
150
|
-
on-profile: dev # ❌ 不应该在主配置文件中
|
|
151
|
-
application:
|
|
152
|
-
name: my-service
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
#### ✅ 推荐的配置结构
|
|
156
|
-
|
|
157
|
-
**application.yml** (主配置 - 所有环境共享):
|
|
158
|
-
```yaml
|
|
159
|
-
spring:
|
|
160
|
-
application:
|
|
161
|
-
name: avatar-demo-service # 必须在主配置文件中定义
|
|
162
|
-
|
|
163
|
-
server:
|
|
164
|
-
port: 8080
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**application-dev.yml** (开发环境):
|
|
168
|
-
```yaml
|
|
169
|
-
spring:
|
|
170
|
-
config:
|
|
171
|
-
import:
|
|
172
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
173
|
-
- optional:nacos:common-database.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
174
|
-
|
|
175
|
-
cloud:
|
|
176
|
-
nacos:
|
|
177
|
-
server-addr: 172.29.242.247:8848
|
|
178
|
-
namespace: dev
|
|
179
|
-
username: ${NACOS_USERNAME:nacos}
|
|
180
|
-
password: ${NACOS_PASSWORD:nacos}
|
|
181
|
-
config:
|
|
182
|
-
enabled: true
|
|
183
|
-
file-extension: yaml
|
|
184
|
-
group: DEFAULT_GROUP
|
|
185
|
-
discovery:
|
|
186
|
-
enabled: true
|
|
187
|
-
register-enabled: true
|
|
188
|
-
ephemeral: true
|
|
189
|
-
group: DEFAULT_GROUP
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
**application-prod.yml** (生产环境):
|
|
193
|
-
```yaml
|
|
194
|
-
spring:
|
|
195
|
-
config:
|
|
196
|
-
import:
|
|
197
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
198
|
-
- optional:nacos:common-database.yaml?group=SHARED_GROUP&refreshEnabled=true
|
|
199
|
-
|
|
200
|
-
cloud:
|
|
201
|
-
nacos:
|
|
202
|
-
server-addr: nacos-prod.example.com:8848
|
|
203
|
-
namespace: prod
|
|
204
|
-
username: ${NACOS_USERNAME} # 从环境变量读取
|
|
205
|
-
password: ${NACOS_PASSWORD}
|
|
206
|
-
config:
|
|
207
|
-
enabled: true
|
|
208
|
-
file-extension: yaml
|
|
209
|
-
group: DEFAULT_GROUP
|
|
210
|
-
discovery:
|
|
211
|
-
enabled: true
|
|
212
|
-
register-enabled: true
|
|
213
|
-
ephemeral: true
|
|
214
|
-
group: DEFAULT_GROUP
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## 配置详解
|
|
218
|
-
|
|
219
|
-
### 服务发现配置
|
|
220
|
-
|
|
221
|
-
```yaml
|
|
222
|
-
spring:
|
|
223
|
-
cloud:
|
|
224
|
-
nacos:
|
|
225
|
-
discovery:
|
|
226
|
-
enabled: true # 启用服务发现
|
|
227
|
-
register-enabled: true # 注册此服务
|
|
228
|
-
ephemeral: true # 临时实例(推荐用于云原生)
|
|
229
|
-
group: DEFAULT_GROUP # 服务分组
|
|
230
|
-
cluster-name: DEFAULT # 集群名称
|
|
231
|
-
weight: 1.0 # 服务权重(0.01-100.0)
|
|
232
|
-
|
|
233
|
-
# 网络设置
|
|
234
|
-
prefer-ip-address: true # 使用 IP 而非主机名
|
|
235
|
-
# ip: 192.168.1.100 # 手动指定 IP(未设置时自动检测)
|
|
236
|
-
# port: 8080 # 手动指定端口(未设置时使用 server.port)
|
|
237
|
-
# network-interface: eth0 # 多网卡场景
|
|
238
|
-
|
|
239
|
-
# 健康检查
|
|
240
|
-
heart-beat-interval: 5000 # 心跳间隔(毫秒)
|
|
241
|
-
heart-beat-timeout: 15000 # 心跳超时(毫秒)
|
|
242
|
-
ip-delete-timeout: 30000 # IP 删除超时(毫秒)
|
|
243
|
-
|
|
244
|
-
# 元数据 - 用于路由/监控的自定义标签
|
|
245
|
-
metadata:
|
|
246
|
-
version: 1.0.0
|
|
247
|
-
environment: ${spring.profiles.active:dev}
|
|
248
|
-
region: cn-east
|
|
249
|
-
team: backend
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
**实例类型:**
|
|
253
|
-
- **临时实例(Ephemeral)**: `ephemeral: true` - 推荐用于云原生
|
|
254
|
-
- 下线时自动删除
|
|
255
|
-
- 维护成本低
|
|
256
|
-
- 适用于:容器、自动扩缩容
|
|
257
|
-
|
|
258
|
-
- **持久化实例(Persistent)**: `ephemeral: false` - 传统部署
|
|
259
|
-
- 下线后仍保留
|
|
260
|
-
- 需要手动清理
|
|
261
|
-
- 适用于:虚拟机、固定 IP
|
|
262
|
-
|
|
263
|
-
### 配置中心配置
|
|
264
|
-
|
|
265
|
-
```yaml
|
|
266
|
-
spring:
|
|
267
|
-
cloud:
|
|
268
|
-
nacos:
|
|
269
|
-
config:
|
|
270
|
-
enabled: true # 启用配置中心
|
|
271
|
-
file-extension: yaml # 配置格式:yaml/properties/json/xml
|
|
272
|
-
group: DEFAULT_GROUP # 配置分组
|
|
273
|
-
refresh-enabled: true # 启用自动刷新
|
|
274
|
-
|
|
275
|
-
# 超时和重试
|
|
276
|
-
timeout: 3000 # 连接超时(毫秒)
|
|
277
|
-
config-long-poll-timeout: 46000 # 长轮询超时(毫秒)
|
|
278
|
-
config-retry-time: 2000 # 重试间隔(毫秒)
|
|
279
|
-
max-retry: 10 # 最大重试次数
|
|
280
|
-
|
|
281
|
-
# 远程同步
|
|
282
|
-
enable-remote-sync-config: false
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### 多环境配置
|
|
286
|
-
|
|
287
|
-
使用 **命名空间(namespaces)** 实现环境隔离:
|
|
288
|
-
|
|
289
|
-
```yaml
|
|
290
24
|
---
|
|
291
|
-
# 开发环境
|
|
292
|
-
spring:
|
|
293
|
-
config:
|
|
294
|
-
activate:
|
|
295
|
-
on-profile: dev
|
|
296
|
-
cloud:
|
|
297
|
-
nacos:
|
|
298
|
-
server-addr: 127.0.0.1:8848
|
|
299
|
-
namespace: dev-namespace-id
|
|
300
|
-
config:
|
|
301
|
-
group: DEV_GROUP
|
|
302
|
-
discovery:
|
|
303
|
-
group: DEV_GROUP
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
# 测试环境
|
|
307
|
-
spring:
|
|
308
|
-
config:
|
|
309
|
-
activate:
|
|
310
|
-
on-profile: test
|
|
311
|
-
cloud:
|
|
312
|
-
nacos:
|
|
313
|
-
server-addr: nacos-test.example.com:8848
|
|
314
|
-
namespace: test-namespace-id
|
|
315
|
-
config:
|
|
316
|
-
group: TEST_GROUP
|
|
317
|
-
discovery:
|
|
318
|
-
group: TEST_GROUP
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
# 生产环境
|
|
322
|
-
spring:
|
|
323
|
-
config:
|
|
324
|
-
activate:
|
|
325
|
-
on-profile: prod
|
|
326
|
-
cloud:
|
|
327
|
-
nacos:
|
|
328
|
-
server-addr: nacos-prod.example.com:8848
|
|
329
|
-
namespace: prod-namespace-id
|
|
330
|
-
username: ${NACOS_USERNAME} # 从环境变量读取
|
|
331
|
-
password: ${NACOS_PASSWORD}
|
|
332
|
-
config:
|
|
333
|
-
group: PROD_GROUP
|
|
334
|
-
discovery:
|
|
335
|
-
group: PROD_GROUP
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
## Nacos 配置文件命名规则
|
|
339
|
-
|
|
340
|
-
Nacos 按以下顺序自动加载配置:
|
|
341
|
-
|
|
342
|
-
1. **应用配置**: `${spring.application.name}.${file-extension}`
|
|
343
|
-
- 示例:`my-service.yaml`
|
|
344
|
-
|
|
345
|
-
2. **应用+环境配置**: `${spring.application.name}-${profile}.${file-extension}`
|
|
346
|
-
- 示例:`my-service-dev.yaml`
|
|
347
|
-
|
|
348
|
-
3. **扩展配置**: 通过 `extension-configs` 指定
|
|
349
|
-
|
|
350
|
-
4. **共享配置**: 通过 `shared-configs` 指定
|
|
351
|
-
|
|
352
|
-
**优先级(从高到低):**
|
|
353
|
-
1. 应用+环境配置
|
|
354
|
-
2. 应用配置
|
|
355
|
-
3. 扩展配置
|
|
356
|
-
4. 共享配置
|
|
357
|
-
|
|
358
|
-
## 代码使用模式
|
|
359
|
-
|
|
360
|
-
### 使用 RestTemplate 进行服务发现
|
|
361
|
-
|
|
362
|
-
```java
|
|
363
|
-
@Configuration
|
|
364
|
-
public class RestTemplateConfig {
|
|
365
|
-
|
|
366
|
-
@Bean
|
|
367
|
-
@LoadBalanced // 启用服务名解析
|
|
368
|
-
public RestTemplate restTemplate() {
|
|
369
|
-
return new RestTemplate();
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
@Service
|
|
374
|
-
public class UserService {
|
|
375
|
-
|
|
376
|
-
@Autowired
|
|
377
|
-
private RestTemplate restTemplate;
|
|
378
|
-
|
|
379
|
-
public User getUser(Long id) {
|
|
380
|
-
// 通过服务名调用(而非 IP:端口)
|
|
381
|
-
return restTemplate.getForObject(
|
|
382
|
-
"http://user-service/users/" + id,
|
|
383
|
-
User.class
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
### 使用 @Value 实现动态配置
|
|
390
|
-
|
|
391
|
-
```java
|
|
392
|
-
@RestController
|
|
393
|
-
@RefreshScope // 配置热更新必需
|
|
394
|
-
public class ConfigController {
|
|
395
|
-
|
|
396
|
-
@Value("${app.feature.enabled:false}")
|
|
397
|
-
private boolean featureEnabled;
|
|
398
|
-
|
|
399
|
-
@GetMapping("/config")
|
|
400
|
-
public String getConfig() {
|
|
401
|
-
return "Feature enabled: " + featureEnabled;
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### 使用 @ConfigurationProperties 实现动态配置
|
|
407
|
-
|
|
408
|
-
```java
|
|
409
|
-
@Component
|
|
410
|
-
@ConfigurationProperties(prefix = "app")
|
|
411
|
-
@RefreshScope // 配置热更新必需
|
|
412
|
-
@Data
|
|
413
|
-
public class AppConfig {
|
|
414
|
-
private String name;
|
|
415
|
-
private String version;
|
|
416
|
-
private Feature feature;
|
|
417
|
-
|
|
418
|
-
@Data
|
|
419
|
-
public static class Feature {
|
|
420
|
-
private boolean enabled;
|
|
421
|
-
private int maxUsers;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
**对应的 Nacos 配置**(Data ID: `my-service.yaml`):
|
|
427
|
-
|
|
428
|
-
```yaml
|
|
429
|
-
app:
|
|
430
|
-
name: My Service
|
|
431
|
-
version: 1.0.0
|
|
432
|
-
feature:
|
|
433
|
-
enabled: true
|
|
434
|
-
maxUsers: 100
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
### 监听配置变更
|
|
438
|
-
|
|
439
|
-
```java
|
|
440
|
-
@Component
|
|
441
|
-
public class ConfigChangeListener {
|
|
442
|
-
|
|
443
|
-
@EventListener
|
|
444
|
-
public void onRefresh(RefreshScopeRefreshedEvent event) {
|
|
445
|
-
log.info("配置已刷新");
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
@EventListener
|
|
449
|
-
public void onEnvironmentChange(EnvironmentChangeEvent event) {
|
|
450
|
-
log.info("环境已变更: {}", event.getKeys());
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
## 最佳实践
|
|
456
|
-
|
|
457
|
-
### 1. 环境隔离策略
|
|
458
|
-
|
|
459
|
-
**使用命名空间隔离环境:**
|
|
460
|
-
- 开发环境:`dev-namespace`
|
|
461
|
-
- 测试环境:`test-namespace`
|
|
462
|
-
- 生产环境:`prod-namespace`
|
|
463
|
-
|
|
464
|
-
**使用分组隔离业务域:**
|
|
465
|
-
- 用户服务:`USER_GROUP`
|
|
466
|
-
- 订单服务:`ORDER_GROUP`
|
|
467
|
-
- 支付服务:`PAYMENT_GROUP`
|
|
468
25
|
|
|
469
|
-
|
|
26
|
+
## 行为准则
|
|
470
27
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
28
|
+
1. **回答要具体**:引用具体的配置项、注解
|
|
29
|
+
2. **主动提醒**:Spring Cloud Alibaba 2023.x **必须**使用 `spring.config.import`,这是最常见的坑
|
|
30
|
+
3. **使用中文回答**
|
|
31
|
+
4. **版本说明**:Spring Cloud Alibaba 2023.0.3.2 + Spring Boot 3.5.3
|
|
474
32
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
添加有用的元数据用于路由和监控:
|
|
478
|
-
|
|
479
|
-
```yaml
|
|
480
|
-
spring:
|
|
481
|
-
cloud:
|
|
482
|
-
nacos:
|
|
483
|
-
discovery:
|
|
484
|
-
metadata:
|
|
485
|
-
version: ${project.version}
|
|
486
|
-
environment: ${spring.profiles.active}
|
|
487
|
-
region: cn-east
|
|
488
|
-
team: backend
|
|
489
|
-
git-commit: ${git.commit.id.abbrev}
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
**使用场景:**
|
|
493
|
-
- **灰度发布**:根据版本路由
|
|
494
|
-
- **流量控制**:根据区域路由
|
|
495
|
-
- **监控告警**:按团队分组
|
|
496
|
-
|
|
497
|
-
### 4. 配置刷新策略
|
|
498
|
-
|
|
499
|
-
- 对需要热更新的 Bean 使用 `@RefreshScope`
|
|
500
|
-
- 监听 `RefreshScopeRefreshedEvent` 实现自定义刷新逻辑
|
|
501
|
-
- 某些配置(如线程池大小)可能需要重启
|
|
502
|
-
|
|
503
|
-
### 5. 健康检查配置
|
|
504
|
-
|
|
505
|
-
```yaml
|
|
506
|
-
management:
|
|
507
|
-
endpoints:
|
|
508
|
-
web:
|
|
509
|
-
exposure:
|
|
510
|
-
include: health,info,nacos-config,nacos-discovery
|
|
511
|
-
endpoint:
|
|
512
|
-
health:
|
|
513
|
-
show-details: always
|
|
514
|
-
health:
|
|
515
|
-
nacos:
|
|
516
|
-
enabled: true
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
访问健康检查:
|
|
520
|
-
```bash
|
|
521
|
-
curl http://localhost:8080/actuator/health
|
|
522
|
-
```
|
|
523
|
-
|
|
524
|
-
## 故障排查指南
|
|
525
|
-
|
|
526
|
-
### 问题 0:Logback Appender 冲突错误
|
|
527
|
-
|
|
528
|
-
**症状**:启动时出现以下错误:
|
|
529
|
-
```
|
|
530
|
-
|-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - 'File' option has the same value "C:\Users\xxx/logs/nacos/config.log" as that given for appender [CONFIG_LOG_FILE] defined earlier.
|
|
531
|
-
|-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[CONFIG_LOG_FILE] - Collisions detected with FileAppender/RollingAppender instances defined earlier. Aborting.
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
**原因**:Nacos 客户端会加载自己的 Logback 配置,创建文件日志 appender(CONFIG_LOG_FILE、NAMING_LOG_FILE、REMOTE_LOG_FILE),与应用的 Logback 配置冲突。
|
|
535
|
-
|
|
536
|
-
**解决方案**:
|
|
537
|
-
|
|
538
|
-
1. **在 Application 启动类中禁用 Nacos 文件日志**(推荐):
|
|
539
|
-
|
|
540
|
-
```java
|
|
541
|
-
@SpringBootApplication
|
|
542
|
-
public class Application {
|
|
543
|
-
|
|
544
|
-
public static void main(String[] args) {
|
|
545
|
-
// 禁用 Nacos 客户端的文件日志输出,解决 Logback appender 冲突问题
|
|
546
|
-
// 参考: https://github.com/alibaba/spring-cloud-alibaba/issues/4004
|
|
547
|
-
// 参考: https://github.com/alibaba/spring-cloud-alibaba/issues/3995
|
|
548
|
-
System.setProperty("nacos.logging.default.config.enabled", "false");
|
|
549
|
-
System.setProperty("nacos.logging.config", "");
|
|
550
|
-
|
|
551
|
-
SpringApplication.run(Application.class, args);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
2. **在 application.yml 中设置 Nacos 日志级别**(可选):
|
|
557
|
-
|
|
558
|
-
```yaml
|
|
559
|
-
logging:
|
|
560
|
-
level:
|
|
561
|
-
com.alibaba.nacos: ERROR # 减少 Nacos 日志输出
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
3. **不要引用不存在的 logback 配置文件**:
|
|
565
|
-
|
|
566
|
-
```yaml
|
|
567
|
-
# ❌ 错误:引用不存在的文件
|
|
568
|
-
logging:
|
|
569
|
-
config: classpath:logback-spring.xml # 如果文件不存在会导致问题
|
|
570
|
-
|
|
571
|
-
# ✅ 正确:不指定或确保文件存在
|
|
572
|
-
logging:
|
|
573
|
-
level:
|
|
574
|
-
com.alibaba.nacos: ERROR
|
|
575
|
-
```
|
|
576
|
-
|
|
577
|
-
**关键点**:
|
|
578
|
-
- 必须在 `SpringApplication.run()` **之前**设置系统属性
|
|
579
|
-
- 这会禁用 Nacos 的文件日志,Nacos 日志只会输出到控制台
|
|
580
|
-
- 通过 `logging.level.com.alibaba.nacos` 控制 Nacos 日志级别
|
|
581
|
-
|
|
582
|
-
**参考资料**:
|
|
583
|
-
- [Spring Cloud Alibaba Issue #4004](https://github.com/alibaba/spring-cloud-alibaba/issues/4004)
|
|
584
|
-
- [Spring Cloud Alibaba Issue #3995](https://github.com/alibaba/spring-cloud-alibaba/issues/3995)
|
|
585
|
-
|
|
586
|
-
### 问题 1:服务未注册
|
|
587
|
-
|
|
588
|
-
**症状**:服务未出现在 Nacos 控制台
|
|
589
|
-
|
|
590
|
-
**诊断步骤:**
|
|
591
|
-
1. 检查 Nacos 服务器地址:`telnet nacos-server 8848`
|
|
592
|
-
2. 启用调试日志:
|
|
593
|
-
```yaml
|
|
594
|
-
logging:
|
|
595
|
-
level:
|
|
596
|
-
com.alibaba.nacos: DEBUG
|
|
597
|
-
com.alibaba.cloud.nacos: DEBUG
|
|
598
|
-
```
|
|
599
|
-
3. 验证 `spring.cloud.nacos.discovery.register-enabled=true`
|
|
600
|
-
4. 检查应用名称已设置:`spring.application.name`
|
|
601
|
-
|
|
602
|
-
**常见原因:**
|
|
603
|
-
- 服务器地址错误
|
|
604
|
-
- 网络/防火墙阻止端口 8848
|
|
605
|
-
- Nacos 服务器未运行
|
|
606
|
-
- 认证失败(用户名/密码错误)
|
|
607
|
-
|
|
608
|
-
### 问题 2:配置未加载
|
|
609
|
-
|
|
610
|
-
**症状**:应用无法从 Nacos 加载配置
|
|
611
|
-
|
|
612
|
-
**常见错误信息**:
|
|
613
|
-
- `No spring.config.import property has been defined`
|
|
614
|
-
- `dataId must be specified`
|
|
615
|
-
- `illegal URI: http://${nacos.server-addr}/...`
|
|
616
|
-
|
|
617
|
-
**诊断步骤:**
|
|
618
|
-
1. ✅ **检查 spring.config.import 是否存在**
|
|
619
|
-
```yaml
|
|
620
|
-
spring:
|
|
621
|
-
config:
|
|
622
|
-
import:
|
|
623
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
2. ✅ **检查 spring.config.import 位置是否正确**
|
|
627
|
-
- 必须在顶层 `spring:` 下
|
|
628
|
-
- 不能在 `spring.cloud.nacos:` 下
|
|
629
|
-
|
|
630
|
-
3. ✅ **检查 spring.application.name 是否在主配置文件中定义**
|
|
631
|
-
```yaml
|
|
632
|
-
# application.yml (主配置)
|
|
633
|
-
spring:
|
|
634
|
-
application:
|
|
635
|
-
name: my-service # 必须在这里定义
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
4. ✅ **检查 dataId 格式是否正确**
|
|
639
|
-
```yaml
|
|
640
|
-
# ✅ 正确
|
|
641
|
-
- optional:nacos:my-service.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
642
|
-
|
|
643
|
-
# ❌ 错误
|
|
644
|
-
- "nacos:" # 缺少 dataId
|
|
645
|
-
- "optional:nacos:${spring.application.name}.yaml" # 缺少 group 参数
|
|
646
|
-
```
|
|
647
|
-
|
|
648
|
-
5. 验证 Data ID 在 Nacos 控制台中存在
|
|
649
|
-
6. 检查命名空间 ID 正确
|
|
650
|
-
7. 验证分组名称匹配
|
|
651
|
-
8. 确认文件扩展名匹配:`file-extension: yaml`
|
|
652
|
-
|
|
653
|
-
**解决方案示例:**
|
|
654
|
-
|
|
655
|
-
```yaml
|
|
656
|
-
# application.yml (主配置)
|
|
657
|
-
spring:
|
|
658
|
-
application:
|
|
659
|
-
name: my-service
|
|
660
|
-
|
|
661
|
-
# application-dev.yml (环境配置)
|
|
662
|
-
spring:
|
|
663
|
-
config:
|
|
664
|
-
import:
|
|
665
|
-
- optional:nacos:${spring.application.name}.yaml?group=DEFAULT_GROUP&refreshEnabled=true
|
|
666
|
-
|
|
667
|
-
cloud:
|
|
668
|
-
nacos:
|
|
669
|
-
server-addr: 127.0.0.1:8848
|
|
670
|
-
namespace: dev
|
|
671
|
-
config:
|
|
672
|
-
enabled: true
|
|
673
|
-
file-extension: yaml
|
|
674
|
-
group: DEFAULT_GROUP
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
### 问题 3:配置未刷新
|
|
678
|
-
|
|
679
|
-
**症状**:Nacos 中的配置更改未在应用中更新
|
|
680
|
-
|
|
681
|
-
**诊断步骤:**
|
|
682
|
-
1. 验证 `spring.cloud.nacos.config.refresh-enabled=true`
|
|
683
|
-
2. 检查 Bean 上有 `@RefreshScope` 注解
|
|
684
|
-
3. 在日志中查找刷新事件
|
|
685
|
-
4. 先用 `@Value` 测试(比 `@ConfigurationProperties` 简单)
|
|
686
|
-
|
|
687
|
-
**常见原因:**
|
|
688
|
-
- 缺少 `@RefreshScope` 注解
|
|
689
|
-
- 配置无法注入(静态字段、构造函数注入)
|
|
690
|
-
- 某些配置不支持热更新(需要重启)
|
|
691
|
-
|
|
692
|
-
### 问题 4:服务调用失败
|
|
693
|
-
|
|
694
|
-
**症状**:`http://service-name/path` 返回错误
|
|
695
|
-
|
|
696
|
-
**诊断步骤:**
|
|
697
|
-
1. 验证目标服务已在 Nacos 中注册
|
|
698
|
-
2. 检查 RestTemplate 上有 `@LoadBalanced` 注解
|
|
699
|
-
3. 验证服务名称正确(区分大小写)
|
|
700
|
-
4. 先测试直接 IP:端口调用
|
|
701
|
-
5. 检查网络连接
|
|
702
|
-
|
|
703
|
-
**常见原因:**
|
|
704
|
-
- 缺少 `@LoadBalanced` 注解
|
|
705
|
-
- 服务名拼写错误
|
|
706
|
-
- 目标服务未注册
|
|
707
|
-
- 网络/防火墙问题
|
|
708
|
-
|
|
709
|
-
### 问题 5:认证失败
|
|
710
|
-
|
|
711
|
-
**症状**:"403 Forbidden" 或 "401 Unauthorized"
|
|
712
|
-
|
|
713
|
-
**解决方案:**
|
|
714
|
-
```yaml
|
|
715
|
-
spring:
|
|
716
|
-
cloud:
|
|
717
|
-
nacos:
|
|
718
|
-
username: ${NACOS_USERNAME:nacos}
|
|
719
|
-
password: ${NACOS_PASSWORD:nacos}
|
|
720
|
-
```
|
|
721
|
-
|
|
722
|
-
在生产环境使用环境变量:
|
|
723
|
-
```bash
|
|
724
|
-
export NACOS_USERNAME=your-username
|
|
725
|
-
export NACOS_PASSWORD=your-password
|
|
726
|
-
```
|
|
727
|
-
|
|
728
|
-
## 配置生成器
|
|
729
|
-
|
|
730
|
-
生成 Nacos 配置时,遵循此模板结构:
|
|
731
|
-
|
|
732
|
-
```yaml
|
|
733
|
-
# 基础结构
|
|
734
|
-
spring:
|
|
735
|
-
application:
|
|
736
|
-
name: <服务名称>
|
|
737
|
-
|
|
738
|
-
cloud:
|
|
739
|
-
nacos:
|
|
740
|
-
server-addr: <NACOS服务器>
|
|
741
|
-
namespace: <命名空间ID>
|
|
742
|
-
username: ${NACOS_USERNAME:nacos}
|
|
743
|
-
password: ${NACOS_PASSWORD:nacos}
|
|
744
|
-
|
|
745
|
-
config:
|
|
746
|
-
enabled: <true|false>
|
|
747
|
-
file-extension: <yaml|properties|json|xml>
|
|
748
|
-
group: <分组名称>
|
|
749
|
-
refresh-enabled: <true|false>
|
|
750
|
-
|
|
751
|
-
discovery:
|
|
752
|
-
enabled: <true|false>
|
|
753
|
-
register-enabled: <true|false>
|
|
754
|
-
ephemeral: <true|false>
|
|
755
|
-
group: <分组名称>
|
|
756
|
-
metadata:
|
|
757
|
-
version: <版本>
|
|
758
|
-
environment: <环境>
|
|
759
|
-
|
|
760
|
-
# 健康检查
|
|
761
|
-
management:
|
|
762
|
-
endpoints:
|
|
763
|
-
web:
|
|
764
|
-
exposure:
|
|
765
|
-
include: health,info,nacos-config,nacos-discovery
|
|
766
|
-
endpoint:
|
|
767
|
-
health:
|
|
768
|
-
show-details: always
|
|
769
|
-
|
|
770
|
-
# 日志
|
|
771
|
-
logging:
|
|
772
|
-
level:
|
|
773
|
-
com.alibaba.nacos: INFO
|
|
774
|
-
com.alibaba.cloud.nacos: INFO
|
|
775
|
-
```
|
|
776
|
-
|
|
777
|
-
## 验证清单
|
|
778
|
-
|
|
779
|
-
审查 Nacos 配置时,检查:
|
|
780
|
-
|
|
781
|
-
- [ ] 已设置 `spring.application.name`
|
|
782
|
-
- [ ] `server-addr` 指向正确的 Nacos 服务器
|
|
783
|
-
- [ ] 命名空间 ID 匹配环境(dev/test/prod)
|
|
784
|
-
- [ ] 配置和发现的分组名称一致
|
|
785
|
-
- [ ] 云原生部署使用 `ephemeral: true`
|
|
786
|
-
- [ ] 生产环境的认证凭据使用环境变量
|
|
787
|
-
- [ ] 需要动态配置时 `refresh-enabled: true`
|
|
788
|
-
- [ ] 元数据包含有用标签(版本、环境)
|
|
789
|
-
- [ ] 健康检查端点已暴露
|
|
790
|
-
- [ ] 生产环境禁用调试日志
|
|
791
|
-
|
|
792
|
-
## 版本兼容性
|
|
793
|
-
|
|
794
|
-
- **Spring Boot**: 3.5.3
|
|
795
|
-
- **Spring Cloud**: 2025.0.0
|
|
796
|
-
- **Spring Cloud Alibaba**: 2023.0.3.2
|
|
797
|
-
- **Java**: 21
|
|
798
|
-
|
|
799
|
-
**重要**:Spring Boot 3.x 不再使用 `bootstrap.yml` - 所有配置都在 `application.yml` 中。
|
|
800
|
-
|
|
801
|
-
## 参考文档
|
|
802
|
-
|
|
803
|
-
- [Spring Cloud Alibaba Nacos](https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config)
|
|
804
|
-
- [Nacos 官方文档](https://nacos.io/zh-cn/docs/what-is-nacos.html)
|
|
805
|
-
- [Spring Cloud LoadBalancer](https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer)
|
|
806
|
-
|
|
807
|
-
## 常见场景
|
|
808
|
-
|
|
809
|
-
### 场景 1:仅服务发现的简单服务
|
|
810
|
-
|
|
811
|
-
```yaml
|
|
812
|
-
spring:
|
|
813
|
-
application:
|
|
814
|
-
name: simple-service
|
|
815
|
-
cloud:
|
|
816
|
-
nacos:
|
|
817
|
-
server-addr: 127.0.0.1:8848
|
|
818
|
-
discovery:
|
|
819
|
-
enabled: true
|
|
820
|
-
config:
|
|
821
|
-
enabled: false # 禁用配置中心
|
|
822
|
-
```
|
|
823
|
-
|
|
824
|
-
### 场景 2:仅配置中心(无服务注册)
|
|
825
|
-
|
|
826
|
-
```yaml
|
|
827
|
-
spring:
|
|
828
|
-
application:
|
|
829
|
-
name: config-consumer
|
|
830
|
-
cloud:
|
|
831
|
-
nacos:
|
|
832
|
-
server-addr: 127.0.0.1:8848
|
|
833
|
-
config:
|
|
834
|
-
enabled: true
|
|
835
|
-
discovery:
|
|
836
|
-
enabled: false # 禁用服务发现
|
|
837
|
-
```
|
|
838
|
-
|
|
839
|
-
### 场景 3:多配置加载
|
|
840
|
-
|
|
841
|
-
```yaml
|
|
842
|
-
spring:
|
|
843
|
-
cloud:
|
|
844
|
-
nacos:
|
|
845
|
-
config:
|
|
846
|
-
extension-configs:
|
|
847
|
-
- data-id: database.yaml
|
|
848
|
-
group: COMMON_GROUP
|
|
849
|
-
refresh: true
|
|
850
|
-
- data-id: redis.yaml
|
|
851
|
-
group: COMMON_GROUP
|
|
852
|
-
refresh: true
|
|
853
|
-
- data-id: kafka.yaml
|
|
854
|
-
group: COMMON_GROUP
|
|
855
|
-
refresh: true
|
|
856
|
-
```
|
|
857
|
-
|
|
858
|
-
### 场景 4:使用元数据的灰度发布
|
|
859
|
-
|
|
860
|
-
```yaml
|
|
861
|
-
spring:
|
|
862
|
-
cloud:
|
|
863
|
-
nacos:
|
|
864
|
-
discovery:
|
|
865
|
-
metadata:
|
|
866
|
-
version: 2.0.0-beta
|
|
867
|
-
gray: true
|
|
868
|
-
canary-weight: 10
|
|
869
|
-
```
|
|
33
|
+
---
|
|
870
34
|
|
|
871
|
-
|
|
35
|
+
## 文档读取路由
|
|
872
36
|
|
|
873
|
-
|
|
37
|
+
> 所有路径相对于 skill 目录 `docs/skills/avatar-boot-starter-nacos-skill/`
|
|
874
38
|
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
39
|
+
| 用户需求 | 需读取的文件 |
|
|
40
|
+
|:--|:--|
|
|
41
|
+
| 快速接入 / spring.config.import | `references/快速接入与配置.md` |
|
|
42
|
+
| 服务注册与发现 / 动态配置 / 共享配置 | `references/功能使用.md` |
|
|
43
|
+
| 故障排查 | `references/故障排查.md` |
|
|
878
44
|
|
|
879
|
-
|
|
880
|
-
curl http://localhost:8080/actuator/health
|
|
45
|
+
---
|
|
881
46
|
|
|
882
|
-
|
|
883
|
-
curl http://localhost:8080/actuator/nacos-discovery
|
|
47
|
+
## 通用参考信息
|
|
884
48
|
|
|
885
|
-
|
|
886
|
-
curl http://localhost:8080/actuator/nacos-config
|
|
49
|
+
### 配置文件命名规则
|
|
887
50
|
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
51
|
+
Nacos 自动加载(优先级从高到低):
|
|
52
|
+
1. `{appName}-{profile}.yaml`
|
|
53
|
+
2. `{appName}.yaml`
|
|
54
|
+
3. 扩展配置(extension-configs)
|
|
55
|
+
4. 共享配置(shared-configs)
|
|
891
56
|
|
|
892
|
-
|
|
57
|
+
### 关键注意事项
|
|
893
58
|
|
|
894
|
-
|
|
895
|
-
-
|
|
896
|
-
-
|
|
897
|
-
-
|
|
898
|
-
- 实现服务发现
|
|
899
|
-
- 设置动态配置管理
|
|
900
|
-
- 审查 Nacos 配置的最佳实践
|
|
901
|
-
- 从其他服务发现解决方案迁移
|
|
59
|
+
- `spring.config.import` 必须配置,否则启动报错
|
|
60
|
+
- `optional:` 前缀表示配置不存在时不报错(推荐)
|
|
61
|
+
- `@RefreshScope` 注解才能支持配置热更新
|
|
62
|
+
- 推荐用 `namespace` 隔离环境,用 `group` 隔离业务
|