2012-02-02 13 views
3

Queue1にメッセージが到着した直後ではなく、指定された間隔でQueue1からQueue2にメッセージを転送する必要があります。以下は私の設定です。ポーラー>構成:Spring JMS統合で区間ベースのcronを設定する

<int-jms:inbound-channel-adapter id="inboundChannelAdapterId" connection-factory="connFactory" destination="jmsQueue1" channel="queueChannel" > 
    <int:poller send-timeout="2000" > 
     <!-- 
     <int:interval-trigger initial-delay="60000" interval="60000" 
     fixed-rate="true"/> 
     --> 
     <int:cron-trigger expression="0 0/1 * * * ?" /> 
    </int:poller> 
</int-jms:inbound-channel-adapter> 

<int-jms:outbound-channel-adapter channel="queueChannel" connection-factory="connFactory" destination="jmsQueue2" > 
</int-jms:outbound-channel-adapter> 

<int:channel id="queueChannel" /> 

上記のXML構成は< INTを無視し、QUEUE1からキュー2に直ちにメッセージを転送します。私は、間隔ベースのソリューションとcronベースのソリューションの両方を試してみました。同様に動作しているようです(すぐにQueue1からQueue2にメッセージを配信します)。ここで "ポーラー"設定に何か問題はありますか?どんな助けでも大歓迎です。

答えて

2

アダプタで受信タイムアウトが必要です。それ以外の場合は、receive()をブロックしてすぐにメッセージを取得します。

EDIT:以下のコメントを参照してください。スレッドをポーリングするスレッドは、2.0.4以降はデフォルトでブロックされなくなりました。

ポーラーに2.0+の構文を使用することを検討することもできます。あなたの現在の構文は

<jms:inbound-channel-adapter id="in" channel="jmsinToStdoutChannel" destination="requestQueue"> 
    <poller fixed-delay="30000"/> 
</jms:inbound-channel-adapter> 

ただ...明確にするために受信タイムアウトがアダプタに設定されている場合は、ポーラースレッドがその長いやメッセージまでをブロックします... 2.0で非推奨となり、2.1で許可されていませんでした到着。これはポーラーがスケジュールに従わないように見えるかもしれません。デフォルト(2.0.4以降)はブロックされません。これは、ポーラーのスケジュールでのみメッセージが受信されることを意味します。

+0

ご返信ありがとうございます。私はあなたの提案を試みたが、問題を解決していない。私は再びdocを介して@ [リンク](http://static.springsource.org/spring-integration/reference/htmlsingle/)に行くと、この機能はキューベースのアダプタが受信としてサポートされていないことを示していますブロックされていない待機? **一方、Spring Integrationの独自のキューベースのチャネルを使用する場合、タイムアウト値には参加する機会があります。次の例は、Polling Consumerがメッセージをほぼ即座に受信する方法を示しています。** これまでにこれを試しましたか?再度、感謝します! – CoderTR

+0

どのSpring Integrationのバージョンを使用していますか? 2.0.4では、デフォルトでブロッキングコールを行わないように動作が変更されました。 https://github.com/garyrussell/spring-integration/commit/b59bdc0d70087b015589a70ed3cb32ef44cf6dd6 –

+0

現在の2.0.xバージョンは2.0.5です。 2.1.0も利用可能です。 –

関連する問題