2016-04-27 1 views
1

私はカスタムシンクモ​​ジュールを持っています。メッセージ数がからカウント、またはそれらがしばらくしてからチャンネルに入っているかどうかを確認します。要するに、私は一括押しをしたい。メッセージの数がカウントに達したとき、またはメッセージがチャンネルに入っているときだけチャネルから消費する

SimpleMessageStoreでバックアップされた集約チャネルでメッセージを消費して格納した後、メッセージの数を集計しようとしましたが、チャネル内のメッセージを確認するのにMessageGroupStoreReaperがあります。

私はメッセージを消費してメモリ内のストアに保存しているので、私はこのアプローチに満足していません。私はJDBCストアも認識していますが、メッセージチャネルとしてこのアプローチを踏襲したくありません。春のXDでredis/mqが私の条件に基づいてinputチャンネルから消費したいと思います。以下に示すように

私の現在のBean構成は次のとおりです。

<int:aggregator id="messageAggregator" ref="messageAggregatorBean" 
    method="aggregate" input-channel="input" output-channel="aggregatorOutputChannel" 
    release-strategy="messageReleaseStrategyBean" release-strategy-method="canRelease" 
    send-partial-result-on-expiry="true" message-store="resultMessageStore"> 
</int:aggregator> 

<int:service-activator id="contributionIndexerService" 
    ref="contributionIndexerBean" method="bulkIndex" input-channel="aggregatorOutChannel" /> 

<bean id="resultMessageStore" 
    class="org.springframework.integration.store.SimpleMessageStore" /> 

<bean id="resultMessageStoreReaper" 
    class="org.springframework.integration.store.MessageGroupStoreReaper"> 
    <property name="messageGroupStore" ref="resultMessageStore" /> 
    <property name="timeout" value="60000" /> 
</bean> 

<task:scheduled-tasks> 
    <task:scheduled ref="resultMessageStoreReaper" method="run" 
     fixed-rate="10000" /> 
</task:scheduled-tasks> 

任意の考えやコメント?

ありがとうございます。

答えて

0

ブローカのキュー(Redis/RabbitMQまたは通常のJMS)でメッセージの数を判断できるかどうかは分かりません。

あなたは間違いなくにそのようなロジックを行うためにを消費する必要があります。

はい、私はAggregatorがあなたを助けることができると思います。しかし、右:それはPersistent Message Storeでなければなりません。場合、彼らはreleaseStrategy条件に達していないgroup-timeoutリリースにそれらのグループのようなオプションを提案

Aggregatorいくつかの時間以来チャンネルである場合

ため

、とにかくいつかそれらを放出したいと考えています:http://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#agg-and-group-to

関連する問題