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

Spring整合。出站异常的网关回复错误

程智明
2023-03-14

我有下一个配置:

入境

<int:gateway id="inGateway" service-interface="XXX"  
    error-channel="errorChannel" 
    default-request-channel="requestChannel" 
    default-reply-channel="replyChannel" />

出站:

<ws:outbound-gateway id="ws-outbound-gateway"
request-channel="inbound" reply-channel="outbound"      uri="XXX" />

链条1:

<int:chain input-channel="requestChannel" output-channel="inbound">
XXX </int:chain>

链2:

<int:chain input-channel="outbound" output-channel="replyChannel"> XXX
</int:chain>

错误:

<int:chain input-channel="errorChannel" output-channel="replyChannel">

        <int:transformer ref="logicTransformers" method="errorTransformerMethod"></int:transformer>


    </int:chain>
</beans>

Java Transformer:

final GenericError errorCatalog = errorCatalog(errorMessage);
LOGGER.warn("Transformed error from catalog: {}", errorCatalog);
final MessageBuilder<Document> builder =
MessageBuilder.withPayload(XmlUtil.parseToDocument(errorCatalog)).copyHeaders(errorMessage.getHeaders()).copyHeadersIfAbsent(errorMessage.getHeaders());

当出站的Web服务关闭时,错误进入错误通道转换器,但要响应,我们有下一个错误:

o、 s.m.c.GenericMessageTemplate$TemporaryReplyChannel#242已收到回复消息,但由于发送请求消息时出现异常,接收线程已退出:GenericMessage[payload=[#document:null],headers={spanTraceId=8bf90ea9ff4266c8,spanId=598680bae5f913d5,spanParentSpanId=8BF90EA9FF4266 C8,replyChannel=org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@76c751de也就是说,functionad=PRUEBASOA12,errorChannel=org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel@76c751de,messageSent=true,id=2108386f-99db-98b9-3d30-3bcf45335424,spanSampled=1,spanName=message:requestChannel}]

我们不明白…因为我们有相同的流程

共有1个答案

章乐逸
2023-03-14

如果服务级别出现错误,原始消息将被包装到消息异常,带有该有效负载的错误消息将被发送到errorChannel中。即使显式使用replyChannel,也必须确保由入站网关填充的replyChannel标头。而正是这个报头在该网关的请求-应答行为中起着主要作用。

错误流中仍然存在reportyHeader,但它已经是MessagingException有效负载中失败消息的一部分。

因此,您的<代码>逻辑转换器。errorTransformerMethod应为此方法提取replyChannel标头,以便将真正的回复发送到显式replyChannel。或者,您可以完全省略此replyChannel,因为真正的发送和接收是基于replyChannel头的。

请阅读参考手册中的更多信息:

https://docs . spring . io/spring-integration/docs/4 . 3 . 11 . release/reference/html/messaging-endpoints-chapter . html # gateway

https://docs . spring . io/spring-integration/docs/4 . 3 . 11 . release/reference/html/configuration . html #命名空间-errorhandler

 类似资料:
  • 我们使用ws-outbound-gateway以下面的方式调用webservice。 如果请求xml采用以下方式,则工作正常。 如果我在请求xml中添加SOAP-ENV:Envelope xmlns:SOAP-ENV = " http://schemas . xmlsoap . org/SOAP/Envelope/"和SOAP-ENV:Body,它将抛出如下错误: org.springframew

  • 我有一个这样的集成流程:

  • 我试图理解在Spring集成中应该如何处理错误。我找到了关于的文档,我试图使用它,但没有捕获异常。 下面是我的HTTP出站网关: 我不明白应该在哪里捕捉这个组件引发的异常(比如500 HTTP错误) 路由由启动。我尝试添加属性: 我尝试使用自定义错误通道。我还尝试重写现有的ErrorChannel:

  • 我使用的API分为两个步骤: 它以异步方式开始处理文档,向您提供用于步骤2的id 因此,问题是如何为HTTP出站网关实现自定义的“成功”标准。我还想将其与我已经实现的RetryAdvice结合起来。 我已经尝试了以下操作,但首先HandleMessage建议中提供的消息的有效负载为空,其次重试未触发: 我已经从4年前的阿特姆找到了这个答案,但首先我没有在出站网关上找到回复通道方法,其次不确定这种情

  • 我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情: 我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示: 其中MessageReceiverHandler()是扩展AbstractMessageHandler的bean。 所以上面我们有一个用于出站消息的消息网关。我假设我们也应该有一个用于入站消息的网关,允许我们将传入消息处理与应

  • 我有一个 FileUpload 事件,应该将其发送到 http:outbound upload URL。为此,我必须首先对登录 URL 进行身份验证并获取响应,并设置要执行的出站上传 URL 的会话 ID。在我的情况下,我有一个事件侦听器,它侦听应用程序以发布文件上传事件。发布后,我的侦听器可以拾取并执行流。我正在尝试了解如何实现这一点,因为文件上传对象需要保留,直到登录响应返回。谢谢!