做 SpringCloud 微服务开发的时候,经常会遇到服务之间互相调用。我之前写代码有时候直接用 Hutool 的 HttpUtil 发请求,有时候用标准的 @FeignClient,一直容易混淆两者适用场景。 借助 CodeBuddy 梳理、对比两套方案的差异、优缺点、踩坑点,整理一份后端开发可以直接参考的选型规范,同时记录使用 AI 辅助写微服务调用代码的心得。
@FeignClient(contextId = "shipMpPayClient", value = ServiceNameConstants.SHIPIOT_SERVICE, path = "/shipMpPay", fallbackFactory = ShipMpPayClientFallbackFactory.class)
public interface ShipMpPayClient {
@PostMapping("/pay")
Result<?> pay(@RequestBody PayDTO dto);
}核心特点:配置上填写服务名称,不是硬编码 IP 和端口。 底层会去 Nacos 注册中心拉取该服务的实例列表,自带负载均衡。并且配置了 fallbackFactory,服务异常、超时的时候可以执行降级逻辑,防止雪崩。
retObj = HttpUtil.post2(uacUrl + "/company/updateFreeMemberSetUp", reqObj, request);这里的 uacUrl 是写死的地址(IP + 端口或者域名),本质就是一个封装好的 HTTP 工具,直接发起 http 请求。
✅ 内部微服务之间互相调用(UAC、ShipIOT 等自己的服务,都注册在 Nacos):优先 OpenFeign 这是 SpringCloud 微服务标准写法,治理能力齐全,适合项目长期维护。
✅ 调用外部第三方接口(微信支付、短信、外部平台接口,没有注册中心):用 HttpUtil / RestTemplate 外部接口不受我们的服务注册中心管理,用简单 Http 工具更方便。
❌ 踩坑提醒: 很多新手图省事,内部微服务也直接写 HttpUtil 硬编码地址。短期能跑,后期扩容、服务迁移、故障的时候会很难维护,属于技术债。
小技巧:日常写微服务代码,我默认让 CodeBuddy 优先生成 Feign,只有明确是第三方接口,才指定生成 Http 工具调用。
OpenFeign = 微服务体系内的 RPC 调用方案,带全套服务治理; HttpUtil.post2 = 单纯的 HTTP 请求工具,适合外部接口。 分清场景再写代码,能减少很多线上故障。CodeBuddy 可以快速帮我们生成两种代码,但是我们要自己把控选型规范,不能 AI 生成什么就直接用什么。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。