3

メッセージがQueue1に到着した直後ではなく、指定された間隔でQueue1からQueue2にメッセージを転送する必要があります。以下は私の設定です。

<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:poller> 構成を無視して、キュー 1 からキュー 2 にメッセージをすぐに転送します。間隔ベースのソリューションと cron ベースのソリューションの両方を試しましたが、どちらも同様に機能するようです (キュー 1 からキュー 2 にメッセージをすぐに配信します)。ここで「ポーラー」の設定に何か問題がありますか? どんな助けでも大歓迎です。

4

1 に答える 1

2

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

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

また、ポーラーに2.0以降の構文を使用することを検討することもできます。現在の構文は2.0で非推奨になり、2.1では許可されませんでした...

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

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

于 2012-03-01T20:57:46.217 に答える