Intermittent BridgeHandler & PublishSubscribeChann

2019-09-01 07:39发布

问题:

I'm seeing weird behaviour when sending data through my channels. I'm using SI gateway when sending a message to be processed. The gateway is setup as below

<integration:gateway id="rptPubGateway"
    default-request-channel="rptPubInChannel"
    default-reply-channel="rptOutputAvailableChannel"
    default-reply-timeout="60000"
    service-interface="xxxx.RptPubGateway" />

The reply channel is being set up as a publish/subscribe channel

<integration:publish-subscribe-channel id="rptOutputAvailableChannel" />

The last service that processes the message is being declared as below

<integration:service-activator input-channel="rptOutputAvailableChannel" ref="requestMessageHandler" method="rptIsDone" output-channel="nullChannel"/>

Now, the issue that i have is that while the code works fine most of the time, it fails sometimes. When everything works fine the last component processing my message is PublishSubsChannel

 PublishSubscribeChannel - preSend on channel 'rptOutputAvailableChannel'

but when it fails the last component becomes BridgerHandler

BridgeHandler@e851a798' sending reply Message: 

I should mention that there are no exceptions being thrown while processing my message. (after the failure I can always resend the same message and everything will work OK)

I'm not sure how that BridgerHandler gets created. From what I know this bridge gets created for pub/subs channels but then why I don't see it in the log when everything works fine ?

I'd appreciate any help

回答1:

When you say "fails" what do you mean?

What are the other consumers on rptOutputAvailableChannel?

The BridgeHandler you see is an internal bridge to the message's replyChannel header, which is where the reply ultimately must go. When explicitly sending to rptOutputAvailableChannel, the bridge handler is always invoked to get the reply to the message's temporary reply channel.