2016-05-24 4 views
1

スリップ私は、ヘッダenricher後にルーティング・スリップを相談するために春の統合ルーティングは、私は春の統合を使用してルーティング・スリップを実装しようとしています

@Bean 
@Transformer(inputChannel = "inputChannel", outputChannel = "replyChannel") 
public HeaderEnricher headerEnricher() { 
    return new HeaderEnricher(Collections.singletonMap(IntegrationMessageHeaderAccessor.ROUTING_SLIP, 
      new RoutingSlipHeaderValueMessageProcessor("channel1", "channel2", "channel3" 
        , "channel4" 
      ))); 

} 

そして

@Bean 
public MessageChannel inputChannel() { 
    return new DirectChannel(); 
} 


@Bean 
@BridgeTo 
public MessageChannel replyChannel() { 
    return new DirectChannel(); 
} 

を次のように、構成があります加えられた

@BridgeTo 

この実装は機能しますが、2回、afte rのコードをデバッグしてこのコードに遭遇し、問題を理解しました。 UnicastingDispatcherクラス

private boolean doDispatch(Message<?> message) { 
    if (this.tryOptimizedDispatch(message)) { 
     return true; 
    } 
    boolean success = false; 
    Iterator<MessageHandler> handlerIterator = this.getHandlerIterator(message); 
    if (!handlerIterator.hasNext()) { 
     throw new MessageDispatchingException(message, "Dispatcher has no subscribers"); 
    } 
    List<RuntimeException> exceptions = new ArrayList<RuntimeException>(); 
    while (!success && handlerIterator.hasNext()) { 
     MessageHandler handler = handlerIterator.next(); 
     try { 
      handler.handleMessage(message); 
      success = true; // we have a winner. 
     } 
     catch (Exception e) { 
      RuntimeException runtimeException = this.wrapExceptionIfNecessary(message, e); 
      exceptions.add(runtimeException); 
      this.handleExceptions(exceptions, message, !handlerIterator.hasNext()); 
     } 
    } 
    return success; 
} 


Iterator<MessageHandler> handlerIterator = this.getHandlerIterator(message); 

[org.springframework.integration.jms.JmsSendingMessageHandler#11、routingSlip.replyChannel.bridgeTo.handler]

を与え、それがラウンドロビンで選んでいます基礎。 それでは、BridgeHandlerとJmsSendingMessageHandlerを次にピックします。

私はBridgeHandlerと常時相談していない構成はありますか?

答えて

1

チャンネルに2人のチャンネル登録者がいるようです。

チャネルに複数のコンシューマが存在する場合は、ラウンドロビンディスパッチが正常です。

+0

はいゲーリー、私はそれを削除し、それを削除し、期待どおりに動作しています。 –

関連する問題