当前位置: 首页 > 知识库问答 >
问题:

Spring Integration中Http出站网关的错误处理

彭朝
2023-03-14

我试图理解在Spring集成中应该如何处理错误。我找到了关于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>

我尝试使用自定义错误通道。我还尝试重写现有的ErrorChannel:

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

共有1个答案

东郭京
2023-03-14

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

根据您的描述, 上的error-channel=“errorchannel”是应该使用的方法,如果没有其他线程向下游移动,这样的MessageHandlingException将真正抛出给poller,并包装成errorMessage发送给配置的errorChannel

它是MessageHandlingException,因为我们在Spring Integration中处理Messaging,并且这样的异常携带一些上下文以及关于流和失败消息的重要信息。您的500 HTTP错误只是该消息中的原因。因此,在捕获和处理errormessage时,应该查看其堆栈跟踪以查找要解析的信息。

另一方面,您可以通过ExpressionEvaluatingRequestHandlerAdviseRequestHandlerRetryAdvise:https://docs.spring.io/spring-integration/docs/5.0.6.release/reference/html/messaging-endpoints-chapter.html#message-handler-advision-chain

 类似资料:
  • 我有一个这样的集成流程:

  • 我有一个http出站网关,它将json消息发布到rest服务,现在rest将以json消息类型的http错误状态响应,以防我们的应用程序捕获任何错误。在将json消息发布到rest服务并获得http成功状态的愉快场景中,我们的应用程序也应该捕获json消息。 现在我通过Spring集成实现了什么,我能够发送消息并获得成功响应并捕获它,但在错误状态下Spring行为会抛出异常,我如何更改行为? 如果

  • 我们的Web应用一旦上线之后,那么各种错误出现的概率都有,Web应用日常运行中可能出现多种错误,具体如下所示: 数据库错误:指与访问数据库服务器或数据相关的错误。例如,以下可能出现的一些数据库错误。 连接错误:这一类错误可能是数据库服务器网络断开、用户名密码不正确、或者数据库不存在。 查询错误:使用的SQL非法导致错误,这样子SQL错误如果程序经过严格的测试应该可以避免。 数据错误:数据库中的约束

  • 我有下一个配置: 入境 出站: 链条1: 链2: 错误: Java Transformer: 当出站的Web服务关闭时,错误进入错误通道转换器,但要响应,我们有下一个错误: o、 s.m.c.GenericMessageTemplate$TemporaryReplyChannel#242已收到回复消息,但由于发送请求消息时出现异常,接收线程已退出:GenericMessage[payload=[#

  • 我有以下Spring Integration JAva DSL代码: 创建为的bean。 我试图实现的是,当SOAP错误到达时,将错误消息路由到错误通道。我认为我可以向处理程序添加一个建议,这个建议应该是,我可以在其中设置失败通道。因此,每当出站网关中抛出错误时,错误消息将被转发到错误通道。 我将trapExecution设置为false,直接将通知添加到网关,并且必须使用,否则流将挂起。所以现在

  • 我正在尝试构建一个集成解决方案,其中 我的outboundgateway定义为 请求工厂在哪里 快乐之路运行良好,我面临的问题是不太快乐的道路。 当Api调用返回错误响应时。转换(exetrnaldto到dto)失败,客户端获得500 我想把error resposne json也翻译成我的json 我如何处理错误情况 我的问题是: 如何处理错误。 在错误条件下如何停止流不转换 如何将状态代码从出