你有没有遇过?刚把业务拆成微服务,上线当天炸锅。A服务调B服务,要么超时要么404,运维查三天才发现是端口被占了?
这篇文章教你3个落地方法,搞定微服务适配,不用瞎折腾配置。
一、先对齐端口和路径,别踩基础坑
- 给每个服务留专属固定端口:用户服务用8081,订单用8082,支付用8083,别乱换。把端口对应表放公司共享盘,改了要留备注。避坑:别用80端口,容易和nginx冲突。比如上周我同事临时把用户服务改到80,直接把nginx的默认页面顶掉了。
- 统一接口路径前缀:所有服务加/api/服务名,比如用户接口是/api/user,订单是/api/order,nginx转发直接按前缀匹配,不用改一堆规则。举个例子:nginx里写
location /api/user { proxy_pass http://localhost:8081; },所有用户服务接口都直接用,不会错。
二、配好服务注册发现,避免跑错服务
- 用Nacos当统一注册中心:国内用着顺手,比Eureka简单,每个服务都连同一个Nacos。把注册地址写在公共配置里,比如127.0.0.1:8848,别让开发自己改。避坑:别把注册地址放本地配置,每个人改来改去,生产环境就乱了。
- 本地调试加临时占位符:你本地测服务,别连生产的注册中心,改配置里的Nacos地址为localhost:8848,测完改回就行。比如本地跑用户服务,配置改了后,服务就只连你自己电脑的Nacos,不会干扰别人。代码示例:
```
spring.cloud.nacos.discovery.server-addr=localhost:8848
```
三、加异常兜底设置,别让用户崩页面
- 设好接口超时时间:服务调另一个服务,超时就返回默认值,别让整个功能崩。在配置文件加两行代码,直接能用:
```
ribbon.ReadTimeout=1000
ribbon.ConnectTimeout=500
```
意思是连接500毫秒没连上,或者读数据1秒没返回,就自动降级。避坑:别设超时太长,超过1秒就卡用户了。
- 统一错误返回格式:不管哪个服务出错,都返回固定格式,比如{"code":500,"msg":"服务忙"},别返回数据库连接失败这种细节,会泄露系统信息。比如用户查订单,订单服务崩了,就返回服务忙,前端直接弹个提示就行,不用改一堆代码。

核心就三个点:先对齐端口路径,再搞定注册发现,最后加兜底设置。
今天抽10分钟,打开你公司的微服务对应表,检查端口和路径是否统一。
改完后,明天测接口,至少能少一半的低级报错。