OpenFeign调用失败:HTTP Status 404 – Not Found

【问题描述】

feign.FeignException$NotFound: [404 ] during [POST] to [http://app-websocket-service/app-websocket-service/app-websocket/sendOneMessage] [AppWebSocketFeign#sendOneMessage(AppWebSocketDTO)]: [<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} ... (431 bytes)]
at feign.FeignException.clientErrorStatus(FeignException.java:201)
at feign.FeignException.errorStatus(FeignException.java:177)
at feign.FeignException.errorStatus(FeignException.java:169)
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:92)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:156)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100)
at com.sun.proxy.$Proxy162.sendOneMessage(Unknown Source)

 

【原因分析】

在服务的消费端,有一个AppWebSocketFeign接口,是对调用第三方服务的接口封装;

在该接口的@FeignClident注解中,设置了value和path参数,其中value指的是微服务名称,path指的是该微服务的上下文根路径: 

 在服务的消费方调用第三方服务时,会把这两个值都添加到请求的路径中的,找不到路径,很可能是因为在服务的提供方的工程配置文件中缺少了上下文根的配置信息:

在服务的提供方工程配置文件中发现,确实没有servlet:context-path:的配置。

 

【解决方案】

在工程对应的nacos配置文件中,添加servlet:context-path的配置,值为服务的应用名称即可:

 获取的就是微服务工程中的bootstrap.yml文件中定义的项目名称:

 

posted @ 2023-09-08 12:20  勇敢-的心  阅读(2143)  评论(0编辑  收藏  举报