gpt4 book ai didi

java - 如何根据 http 状态代码路由从 http 出站网关发出的错误消息?

转载 作者:行者123 更新时间:2023-12-01 10:22:35 30 4
gpt4 key购买 nike

我有一个带有自定义错误 channel 的网关,配置为接收来自流程更深处的 http 出站网关的错误消息。

@MessagingGateway(errorChannel="invocationFailureChannel")
public interface Invocator {
@Gateway(requestChannel="invocationChannel")
public Boolean invokeService(Message<String> invocation);
}

当出站网关无法调用其指定端点时,我最终会在错误 channel 上出现 MessageHandlingException。它有一个原因告诉我出了什么问题,但我想根据状态代码而不是我现在使用的异常对象来路由消息,以替代状态(所有子类 IOException 的异常都不是 500 ):

public ErrorType determineErrorType(Throwable cause) {
return (cause.getCause() instanceof IOException ?
ErrorType.DOWNSTREAM_UNAVAILABILITY :
ErrorType.INVALID_DATA);
}

如果我实际上在状态代码上进行路由,那会更干净,因为将来可能会有其他状态代码的其他流程。另外,我什至不确定我所设定的条件是否涵盖所有可能的异常(exception)情况。

感谢您的帮助。

编辑:

嘿,我尝试向不存在的 url 发送请求并检查异常负载,但原因是 ResourceAccessException/UnknownHostException 而不是 HttpStatusCodeException。

Exception payload

现在网关和最终的 http 出站网关之间有很多中间组件,但这并不重要,对吧?这是实际的网关配置:

.handle(Http.outboundGateway(spelParser.parseExpression("headers." + HeaderKeys.TARGET_ENDPOINT))
.extractPayload(true)
.httpMethod(HttpMethod.POST)
.expectedResponseType(String.class)
.requestFactory(requestFactory())
.get()
, httpOutboundEndpointSpec())
.wireTap("outboundLoggerChannel")
.handle(new GenericHandler<String>() {
@Override
public Object handle(String reply, Map<String, Object> headers) {
System.out.println("Logging response");
return true;
}
})

当出站网关返回200以外的任何状态时,异常会忽略网关调用后的窃听,直接跳转到@Gateway右侧配置的错误 channel ?我真的不知道我做错了什么。

最佳答案

您需要显示错误流程,但是 MessagingException.cause() 很可能是 HttpStatusCodeException(客户端 - 4xx 或服务器 - 5xx),并带有 >statusCode 属性。

关于java - 如何根据 http 状态代码路由从 http 出站网关发出的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482894/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com