必须为用户、订单、支付服务分别配置互不冲突的http和grpc端口(如8001/9001、8002/9002、8003/9003),否则启动时因地址占用报“bind: address already in use”而退出;需通过kratos run验证日志、curl和grpcurl测试连通性,并确保注册中心配置一致且服务名唯一。

在本地开发阶段需要并行调试用户服务、订单服务和支付服务,每个服务必须独立启动且端口不冲突,否则会因地址占用导致进程崩溃或服务不可达。
确认各服务监听端口不重复
打开每个服务的 configs/config.yaml 文件,检查 http.address 和 grpc.address 字段;例如用户服务设为 :8001 和 :9001,订单服务用 :8002 和 :9002,支付服务用 :8003 和 :9003;【若多个服务共用同一端口,启动时会报 listen tcp :8000: bind: address already in use 并退出】。
修改后执行 go mod tidy 确保依赖无误,再进入各服务根目录验证配置可加载:运行 kratos run -c configs/config.yaml,观察日志是否输出对应端口的 server 启动信息。
使用不同终端窗口分别启动
方法一:手动开三个终端,依次进入各服务目录执行:
终端1 → cd user-service && kratos run
终端2 → cd order-service && kratos run
终端3 → cd payment-service && kratos run
方法二(推荐):用 tmux 创建会话并分屏,执行:tmux new-session -s kratos-dev → Ctrl-b " 垂直分屏 → Ctrl-b % 再分一屏 → 分别在各窗格中 cd 并 run;这样便于横向比对日志,且关闭会话即统一停止所有服务。
验证多服务是否正常响应
第一步:用 curl 检查 HTTP 接口连通性。
第二步:用 grpcurl 测试 gRPC 服务可用性,例如:grpcurl -plaintext localhost:9001 list 应返回对应服务的包名。
第三步:查看各服务日志中是否出现 [server] start http server at [::]:800X 和 [registry] register service 行——没有注册日志说明服务未接入注册中心,但本地调试可暂不启用 registry。
注意:若启用了本地 Consul 或 Etcd,需确保每个服务的 registry.endpoint 指向同一地址,且 name 字段全局唯一;否则注册失败会导致其他服务无法发现它。











