rest client 微服务联调必须用 .http 文件:.rest 后缀会导致变量解析失败、### 分隔符失效、环境变量无法注入,引发 404 或空响应;需在同文件内链式调用(如取 token 后请求订单服务),顶部声明 @host 等变量以支持多环境切换。

REST Client 适合微服务 API 联调,但必须用 .http 文件而非 .rest
VSCode REST Client 插件在微服务调试中真正起效的前提是文件后缀为 .http。用 .rest 后缀会导致变量解析失败、### 分隔符不生效、环境变量无法注入。常见错误现象是点击 “Send Request” 后返回 404 或空响应,实际请求根本没发出去。
使用场景集中在本地多服务联调阶段:比如调用 auth-service 获取 token,再用该 token 请求 order-service。这时需在同一个 .http 文件里定义多个请求,并用 @token = {{response.body.$.access_token}} 提取并复用字段。
- 必须在文件顶部声明环境块,例如
@host = http://localhost:8080,否则硬编码 URL 会让切换 dev/staging 环境变得脆弱 - 避免在请求体中直接写死 JSON 字符串;改用
{{body_create_user}}引用外部 JSON 文件,便于复用和版本控制 - Spring Boot Actuator 的
/actuator/health类端点建议单独建一个health.http,方便一键轮询所有服务状态
Docker 插件能启动容器,但微服务间网络互通需手动配置 bridge
VSCode Docker 插件点击 “Run Interactive” 启动单个容器没问题,但默认使用 bridge 网络时,各微服务容器之间无法通过服务名互相访问——这是最常被忽略的网络层问题。现象是服务 A 调用 http://user-service:8080/users 报 ECONNREFUSED 或 ENOTFOUND。
根本原因在于 Docker Desktop 默认的 bridge 不支持容器 DNS 解析,而 docker-compose.yml 定义的自定义网络才支持服务名自动解析。
- 不要依赖插件右键菜单直接运行单个容器;应在项目根目录维护一份
docker-compose.yml,包含所有依赖服务(如注册中心、配置中心、DB) - 在
docker-compose.yml中显式声明networks并让所有服务加入同一自定义网络,例如microservices-net - VSCode Docker 插件仅用于查看日志(右键容器 →
View Logs)或执行命令(Execute Command),启动仍应走docker-compose up -d
GitLens 对微服务历史追踪有用,但跨仓库提交链路会断
GitLens 在单个代码仓库内可精准定位某行代码由谁在何时修改,但在微服务架构中,一个业务逻辑常横跨 api-gateway、user-service、notification-service 多个独立 Git 仓库。此时 GitLens 无法自动串联变更上下文,容易误判“问题出在本服务”,实则根源在下游服务某次提交。
典型表现是:你在 order-service 发现订单状态不更新,用 GitLens 查到最近一次修改是三天前,但真实原因是 payment-service 两天前合并了一个破坏性 PR,导致回调失败。
- 对关键接口(如 Webhook 回调、事件总线消息体)强制要求 PR 描述中注明关联的其他服务 PR 链接,形成人工 traceability
- 在
git log中配合--grep搜索关键词(如"order-status"),比依赖 GitLens 的行级 blame 更有效 - 避免在多个仓库共用相同 commit message 模板;应加入服务标识前缀,例如
[user-service] fix email validation regex
Compound launch.json 可同时调试多服务,但 JVM 参数必须隔离
VSCode 的 compound 配置确实能一键启动多个 Java 微服务调试会话,但若所有服务共用同一份 JVM 参数(尤其是 -Xdebug 相关),会出现端口冲突或调试器抢占,导致只有第一个服务能进断点。
错误配置示例:所有 configurations 里都写 "port": 5005,结果第二个服务启动时抛出 Address already in use。
- 每个服务的
launch.json配置必须分配唯一调试端口,如auth-service → 5005、order-service → 5006 - 对应服务的 JVM 启动参数也要严格匹配,例如
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5006 - Spring Boot 3.x+ 项目务必在
vmArgs中加入--add-opens java.base/java.lang=ALL-UNNAMED,否则断点无法命中 record 类型或模块化包内的方法











