状态为 0 的 FeignException?
FeignException with status 0?
我收到状态为 0 的 FeignException(RetryableException) 而不是 HTTP 500 或 504 超时问题。
在 Postman 中,我得到 HTTP 状态 500。
为什么创建状态为 0 的 FeignException?
根据证据,您的 Postman-based webapp 正在使用 Feign 尝试与其他服务对话。当 Feign 尝试连接到服务时,它会在连接尝试期间或等待响应期间超时。
无论哪种情况,读取超时都意味着 Feign 没有获得 HTTP 响应。由于状态代码来自该响应,因此没有 HTTP 状态代码进入 FeignException
.
您的 Postman 应用程序代码显然没有处理 FeignException
,因此它正在传播到 Postman 堆栈中,后者正在将其(正确)转换为 HTTP 500(内部错误)。
简而言之,Feign 没有传递 HTTP 状态代码,因为它没有得到一个。 (并且无论如何都没有表示“请求超时”的 HTTP 状态代码。)
更新
I need to process all exception message/status of my feign client. For that, i put a try/catch for FeignException. This exception is created by feign when readtimeout is over XXX time. I don't know how i can get the status 500 got by postman instead of 0.
我认为您正在尝试解决错误的问题。
您想要在响应不存在时从响应中获取 HTTP 状态。显然你无法得到不存在的东西。或者,在这种情况下,您希望假装 伪造 响应代码。显然不是。
正如我上面所解释的,Postman 给出的 500 错误不是来自您的假请求的响应代码。这是 Postman 为您的网络应用程序生成的响应代码。这是一个“内部错误”,您的代码允许 FeignException
在超时的情况下传播!
因此,如果您想在 try / catch 中诊断/处理超时,您需要专门测试异常处理程序中的状态 == 0。那么你可以:
将所有响应代码为零的情况视为未诊断错误。
测试ex.getMessage()
看它是否包含“超时”或“超时”或类似内容。 (请注意,测试异常消息的特定内容会使您的代码可能变得脆弱或依赖于平台。但这可能不是您关心的问题。)
测试 ex.getCause()
以查看原因异常是否指示超时、“连接被拒绝”或其他原因。
我收到状态为 0 的 FeignException(RetryableException) 而不是 HTTP 500 或 504 超时问题。
为什么创建状态为 0 的 FeignException?
根据证据,您的 Postman-based webapp 正在使用 Feign 尝试与其他服务对话。当 Feign 尝试连接到服务时,它会在连接尝试期间或等待响应期间超时。
无论哪种情况,读取超时都意味着 Feign 没有获得 HTTP 响应。由于状态代码来自该响应,因此没有 HTTP 状态代码进入 FeignException
.
您的 Postman 应用程序代码显然没有处理 FeignException
,因此它正在传播到 Postman 堆栈中,后者正在将其(正确)转换为 HTTP 500(内部错误)。
简而言之,Feign 没有传递 HTTP 状态代码,因为它没有得到一个。 (并且无论如何都没有表示“请求超时”的 HTTP 状态代码。)
更新
I need to process all exception message/status of my feign client. For that, i put a try/catch for FeignException. This exception is created by feign when readtimeout is over XXX time. I don't know how i can get the status 500 got by postman instead of 0.
我认为您正在尝试解决错误的问题。
您想要在响应不存在时从响应中获取 HTTP 状态。显然你无法得到不存在的东西。或者,在这种情况下,您希望假装 伪造 响应代码。显然不是。
正如我上面所解释的,Postman 给出的 500 错误不是来自您的假请求的响应代码。这是 Postman 为您的网络应用程序生成的响应代码。这是一个“内部错误”,您的代码允许 FeignException
在超时的情况下传播!
因此,如果您想在 try / catch 中诊断/处理超时,您需要专门测试异常处理程序中的状态 == 0。那么你可以:
将所有响应代码为零的情况视为未诊断错误。
测试
ex.getMessage()
看它是否包含“超时”或“超时”或类似内容。 (请注意,测试异常消息的特定内容会使您的代码可能变得脆弱或依赖于平台。但这可能不是您关心的问题。)测试
ex.getCause()
以查看原因异常是否指示超时、“连接被拒绝”或其他原因。