Spring integration 间歇式桥牌手&;PublishSubscribeChannel调用网关时';回复频道为发布/订阅

Spring integration 间歇式桥牌手&;PublishSubscribeChannel调用网关时';回复频道为发布/订阅,spring-integration,Spring Integration,当通过我的频道发送数据时,我看到了奇怪的行为。我在发送要处理的消息时使用SI网关。网关的设置如下所示 <integration:gateway id="rptPubGateway" default-request-channel="rptPubInChannel" default-reply-channel="rptOutputAvailableChannel" default-reply-timeout="60000" service-interface=

当通过我的频道发送数据时,我看到了奇怪的行为。我在发送要处理的消息时使用SI网关。网关的设置如下所示

<integration:gateway id="rptPubGateway"
    default-request-channel="rptPubInChannel"
    default-reply-channel="rptOutputAvailableChannel"
    default-reply-timeout="60000"
    service-interface="xxxx.RptPubGateway" />
但当它失败时,最后一个组件将成为BridgerHandler

BridgeHandler@e851a798' sending reply Message: 
我应该提到,在处理我的消息时没有抛出异常。(失败后,我始终可以重新发送相同的消息,一切正常)

我不知道BridgerHandler是怎么产生的。据我所知,这座桥是为pub/subs频道创建的,但既然一切正常,为什么我在日志中看不到它呢

如果你说“失败”,我将非常感谢你的帮助你是什么意思

rptoputavailablechannel
上的其他消费者是什么


您看到的
BridgeHandler
是消息的
replyChannel
头的内部桥接器,这是回复最终必须到达的地方。当显式发送到
rptOutputAvailableChannel
时,将始终调用桥接处理程序以获取对消息临时回复通道的回复。

一旦调用桥接处理程序,我将收到“ChannelResolutionException:无输出通道或replyChannel标头可用”错误。rptOutputAvailableChannel有a)一个service activator订户客户端(请参见我的原始问题),该客户端的输出上有一个nullChannel,b)另外两个网关,即,这意味着发送到回复通道的消息丢失了它的
replyChannel
头。您不能向回复通道发送任意消息,它必须包含入站消息的
replyChannel
头-这就是框架将回复与请求关联的方式。“两个其他网关…”-不能有多个网关使用同一个应答通道;回复必须始终发送到启动流的网关。Re:“replyChannel header”,我不会向我的频道发送任何任意消息,但我同意这些标头会以某种方式丢失。有什么方法可以调试更改我的消息的内容吗?Re:“两个其他网关”,它们是相同有效负载的不同入口点,即gateway1作为输入XML,而gateway2从具有相同有效负载(XML)的其他服务调用。在这两种情况下,处理通道都完成了对同一服务激活器的调用(这就是为什么我的replyChannel被声明为pub/subs),但不能有多个网关具有相同的应答通道,否则每个网关都将从请求中获得应答。考虑到网桥的工作方式,它可以正常工作,但是(在框架的较新版本中)您将收到来自其他实例的延迟回复警告。最好不要声明回复通道,让框架负责路由。只是不要在最终端点上包含
输出通道
。打开调试日志记录,您应该可以看到
replyChannel
头丢失的地方。
<integration:service-activator input-channel="rptOutputAvailableChannel" ref="requestMessageHandler" method="rptIsDone" output-channel="nullChannel"/>
 PublishSubscribeChannel - preSend on channel 'rptOutputAvailableChannel'
BridgeHandler@e851a798' sending reply Message: