gpt4 book ai didi

java - Spring Integration 中的 Http Outbound Gateway 错误处理

转载 作者:行者123 更新时间:2023-12-02 11:03:47 24 4
gpt4 key购买 nike

我试图了解 Spring Integration 中应如何处理错误。我发现documentation关于errorChannel,我尝试使用它但没有捕获异常。

这是我的 HTTP 出站网关:

<int-http:outbound-gateway id="orderRequestHttpGateway"
request-channel="orders-channel"
url="${url}"
http-method="POST"
expected-response-type="java.lang.String"
reply-timeout='5000'
reply-channel='pushed-channel'
charset="UTF-8">
</int-http:outbound-gateway>

我不明白应该在哪里捕获该组件抛出的异常(例如 500 HTTP 错误)

路由由轮询器启动。我尝试添加一个error-channel属性:

<int:inbound-channel-adapter channel="orders-trigger-channel" expression="''">
<int:poller fixed-delay="${poller}" error-channel="errorChannel"/>
</int:inbound-channel-adapter>

我尝试使用自定义错误 channel 。我还尝试覆盖现有的 errorChannel:

<int:channel id="errorChannel"/>
<int:outbound-channel-adapter id="errorChannelHandler"
ref="errorManager"
method="foo"
channel="errorChannel"/>

到目前为止,我一直收到 MessageHandlingException 并且无法捕获它们并正确处理它们。

最佳答案

您只能在调用者线程中或在有 try...catch 的地方捕获异常。 - Spring Integration 与纯 Java 没有什么不同:每当我们有 try...catch 时,我们就会捕获异常。 .

根据您的描述,error-channel="errorChannel"关于<poller>是可行的方法,如果您没有任何其他线程向下游移动,例如 MessageHandlingException确实被扔给轮询器并包装到 ErrorMessage 中发送至errorChannel配置完毕。

这是一个MessageHandlingException因为我们处理Messaging在 Spring Integration 中,此类异常携带一些有关流程和失败消息的上下文和重要信息。您的500 HTTP error只是一个 cause在那条消息中。所以,当你捕获并处理ErrorMessage时您应该查看其堆栈跟踪以获取要解析的信息。

另一方面,您可以通过ExpressionEvaluatingRequestHandlerAdvice缩小错误处理的范围。或RequestHandlerRetryAdvice : https://docs.spring.io/spring-integration/docs/5.0.6.RELEASE/reference/html/messaging-endpoints-chapter.html#message-handler-advice-chain

关于java - Spring Integration 中的 Http Outbound Gateway 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136379/

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