如何解决FeignException的状态为0?
由于超时问题,我收到状态为0而不是HTTP 500或504的FeignException(RetryableException)。
为什么创建FeignException的状态为0?
解决方法
基于证据,您基于Postman的Web应用程序正在使用Feign尝试与其他服务进行对话。当Feign尝试连接到服务时,它会在尝试连接或等待响应时超时。
无论哪种情况,读取超时都意味着Feign无法获得HTTP响应。由于状态代码来自该响应,因此没有HTTP状态代码可进入FeignException
。
您的Postman应用程序代码显然没有处理FeignException
,因此它正在传播到Postman堆栈中,该堆栈将其(正确地)转换为HTTP 500(内部错误)。
简而言之,Feign不会传递HTTP状态代码,因为它没有得到一个。 (并且没有HTTP状态代码表示“请求超时”。)
更新
我需要处理假冒客户的所有异常消息/状态。为此,我对FeignException进行了尝试/捕获。当readtimeout超过XXX时间时,伪装会创建此异常。我不知道如何获得邮递员获得的状态500,而不是0。
我认为您正在尝试解决错误的问题。
您希望在响应不存在时从响应获取HTTP状态。显然,您无法得到不存在的东西。另外,在这种情况下,您希望伪装伪造。显然不是。
并且正如我上面所解释的,Postman给出的500错误不是您假装请求的响应代码。这是Postman为您的Web应用生成 的响应代码。在超时的情况下,您的代码允许FeignException
传播是一个“内部错误”!
因此,如果您想在try / catch中诊断/处理超时,则需要专门测试异常处理程序中的status == 0。然后您可以:
-
处理所有响应代码为零的情况,作为无法诊断的错误。
-
测试
ex.getMessage()
以查看其是否包含“超时”或“超时”或类似内容。 (请注意,测试异常消息的特定内容可能会使您的代码易碎或依赖于平台。但这对您而言可能不是问题。) -
测试
ex.getCause()
,查看原因异常是否表明超时,“连接被拒绝”或其他原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。