2016-11-08 18 views
1

Spring Integration DSLで速度が上がっています。私は以下の例で遊んでいます。Spring統合Java DSL - IntegrationFlow複数のサブスクライバ

@Bean 
    public IntegrationFlow flow() { 
     return IntegrationFlows.from(INBOX) 
       .transform(p -> "world") 
       .get(); 
    } 

私は、この1つのフローから複数のチャンネルを購読する能力を探しています。私はこれについて何も見つけることができません。

たとえば、このフローが異なるチャネルに登録されている以下のようなものです。

@Bean 
     public IntegrationFlow flow() { 
      return IntegrationFlows.from(INBOX).flow(INBOX2) 
        .transform(p -> "world") 
        .get(); 
     } 

答えて

3

これはできません。 Endpointには、複数のinputChannelがあります。

我々は常に別のチャネルからbridgeすることができますので、私たちは、このような複雑さを必要としない一方:

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

はまた、あなたがいつものために所望のチャンネルに評価するためにいくつかのrouterを使用することを考慮することができます出力。

MessageChannelは、Spring統合デザインでは複雑であり、エンドポイントロジックを混乱させるようには聞こえません。このチュートリアル[Receive and send multiple JMS messages in one transaction with Spring Integration Java DSL]

1

、彼らはしかし、このプロパティがまだのJava DSLに利用できないこと

のように説明してきました。別の この問題を解決する方法は、メッセージ駆動の チャネルアダプタをトランザクションポーラーに置き換えることですが、現在のJava DSLでは も可能ではありません。これを解決するために、アウトバウンドアダプタの jmsFactoryをjmsTemplateに置き換え、セッション をtrueに設定しました。結果:

IntegrationFlows 
    .from(subscribableChannel()) 
    .handle(Jms.outboundAdapter(jmsTemplate).destination(QUEUE2)) 
.get(); 
関連する問題