Spring Cloud微服务feign远程调用404问题

Spring Cloud 专栏收录该内容
2 篇文章 0 订阅

远程调用异常

有两服务课程服务和订单服务,课程服务 --> 调用订单服务,主要是查询课程是否存在支付过的订单
在这里插入图片描述

—更新 2020年8月13日09:06:02

课程服务定义的FeignClient接口

在这里插入图片描述

订单服务暴露的接口

在这里插入图片描述

排查问题

请求地址都对的上,为什么访问404呢?后来检查注解配置等是否缺少,最终把问题定位在UrlMapping中,可以看到有两个PathVariable丶{courseId}丶{memberId},课程ID和会员ID.经过调试发现远程调用请求的Url确实有问题,如图红框中的标记.
在这里插入图片描述
在这里插入图片描述
图中的请求地址对应的是 “/eduorder/order/ensureBuyCourse/{courseId}/ “,调试到这一步瞬间悟了,原来如此,因为memberId传进去的变量为空字符串””,然后生成的请求Url就变成了图中的 /eduorder/order/ensureBuyCourse/11922522/ ,所以请求404了,正确的请求地址应该是/eduorder/order/ensureBuyCourse/11922522/55555
试想如果courseId和memberId都为空,那么请求的Url应该是这样的: /eduorder/order/ensureBuyCourse//

总结

  1. 接口需要暴露给其他服务调用,避免在Mapping中定义PathVariable变量来映射地址
    反例: /eduorder/order/ensureBuyCourse/{courseId}/{memberId}/
    正确定义: /eduorder/order/ensureBuyCourse

  2. 远程调用的接口如果带有PathVariable变量,那么远程调用时请务必做非空处理,保证调用时传入的实参是正确的

  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值