2016-06-01 9 views
1

SI-DSLを使用してSIフローを作成していますので、この質問がSi-DSLのみに関連するのかSIおよびSI- DSL。フローステップとしてのMessageSource

私のユースケースは、この
ようなものです - キュー からメッセージを取得 - データベーステーブル にメッセージを保存する - 将来 にいくつかの点でいくつかの特定の状態 でメッセージを選択することで、それらのメッセージを取得する - さらに処理メッセージ...

私の問題は3番目のステップです。私はJdbcPollingChannelAdapterをMessageSourceとして使うことができるので、3番目のステップが1番目の場合は簡単です。しかし、私はフローの途中で1つを使用する方法を見つけることができませんでした。だから、DSLの用語で、(dbDataMessageSourceがJdbcPollingChannelAdapterです)私は

IntegrationFlows 
    .from(dbDataMessageSource(), p -> p.poller(Pollers.fixedRate(24, TimeUnit.HOURS))) 

を行うことができます。しかし、私は行うことはできません

代わりに ".handle" 私はゲートウェイを使用しようとしたの
IntegrationFlows 
      .from(Jms.messageDrivenChannelAdapter(...)) 
      .handle(new JdbcOutboundGateway(...) 
      .handle(dbDataMessageSource(), p -> p.poller(Pollers.fixedRate(24, TimeUnit.HOURS))) 

、ブリッジ、handleWithAdapter、しかし注目に値する。

アイデア?

乾杯。

答えて

0

まあ、私が言及したようにこれを行う方法を見つけました。私はJdbcOutboundGatewayを書き直すことができます.JdbcMessageHandlerとJdbcPollingChannelAdapterの両方が含まれています。この最後のものを設定可能にして、ポーリング時間と出力チャンネルを設定します。

少しばかげていますが、うまくいくはずです。

乾杯。

2

誰もがフローを単一のIntegrationFlowオブジェクトとして宣言しなければならないと考える理由はわかりませんが、誰もチャンネルを複数のチャンネルに分割してチャンネルに接続することを止める者はいません。 1つは.channel("foo")で終わり、もう1つはIntegraitonFlows.from("foo")で始めることができます。それはあなたがそのチャネルを省略し、両方のフローを1つに接続できるように見えますが。

IntegrationFlowは、コード数を最小限に抑えるだけで、いくつかのボイラープレートスニペットを実際には省略できます。しかし、あなたのロジックにチャネルが必要な場合、またはいくつかの段階がある場合は、結果を分割して楽しむことができます。

だから、あなたのロジックは次のようである:

キューとDB内ストアから読み
  • 。それは1つですIntegrationFlow
  • dbDataMessageSource()とDBをポーリングします。別の独立した流れ。

Core Spring Integrationについて詳しくは、こちらをご覧ください。 Java DSLは設定を単純化しようとしていますが、それでもSI Coreの同じchannel -> endpoint -> handlerの原則に従います。

+0

こんにちは、お返事ありがとうございます。私はそれをすることの短所を含めて、フローの接続について知っていました。私はこれを試しています。これは、ユースケースでSIとDSLを調べるプロトタイプであるためです。また、(私がまだ調査していなかった)私は、プロセス全体(エラー処理と制御バス)に同じインフラストラクチャを持たせるより良い方法を探していました。最後に、私たちのユースケースは、私が言ったものより少し複雑なものになる可能性があるからです。私はSIについて少しは知っていますが、2008年と2009年には多大な努力をしましたが、現在の実装についてもっと知るべきかもしれません。乾杯。 – amsmota

+0

「不利益」について懸念しています。あなたは言う:「将来、特定の州によってどこかで読む」。ですから、 'JdbcOutboundGateway'の出力を' dbDataMessageSource() 'に接続するのはあなたの望むところです。最初の '.handle()'の出力は次の '.handle()'の入力です。使い慣れた ''と同じように。 * poll * DBを使用したいので、入力はありません。そのため、 'MessageSource'はフローを開始するが、続行しない種類のものです。そのためには、同じ 'JdbcOutboundGateway'を使うべきです。心配しないでください。 –

+0

混在していますか?実際、JdbcOutboundGatewayは、フローの途中で使用できるPollable MessageSource(JdbcPollingChannelAdapter)を持っていて、私が記述したものとまったく同じです...しかし、私はプロダクション作業ではなく、いくつかのProof Of Conceptsをやっています。懸念を混ぜる時期です。ジェラルド・M・ワインバーグの原則に従う傾向があります。この場合、「ツールを悪用する3つの方法について考えることができない場合、そのツールの使い方を理解できません」。 :) – amsmota

関連する問題