Spring Integration のこれらのキューベースのチャネルはすべて、デフォルトでメッセージをメモリ内にのみ保存します。永続性が必要な場合はmessage-store
、' ' 要素内に ' ' 属性をqueue
指定して永続的な MessageStore 実装を参照するか、ローカル チャネルを永続的なブローカー (JMS に基づくチャネルやチャネル アダプタ。後者のオプションを使用すると、任意の JMS プロバイダーの実装を利用してメッセージを永続化できます。
QueueChannel
以下に示すように、message-store 属性を追加することで、任意のメッセージ ストアを構成できます。
org.springframework.integration.store.MessageStore
Spring Integration は、a) 戦略インターフェースを定義する、b) このインターフェースのいくつかの実装を提供する、および c) 注入できるようにメッセージをバッファリングする機能を持つすべてのコンポーネントで message-store 属性を公開することにより、Message Store パターンのサポートを提供します。 MessageStore インターフェイスを実装する任意のインスタンス。
私の例ではJDBC Message Storeを使用していますが、他にも利用可能なオプションがいくつかあります。
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${my.jdbc.driver}"/>
<property name="url" value="${my.jdbc.url}"/>
<property name="username" value="${my.jdbc.username}"/>
<property name="password" value="${my.jdbc.password}"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="connectionProperties" value="SetBigStringTryClob=true;"/>
</bean>
<!-- The poller is needed by any of the QueueChannels -->
<integration:poller id="myPoller" fixed-rate="5000" default="true"/>
<!-- The MessageStore is needed to persist messages used by any of the QueueChannels -->
<int-jdbc:message-store id="myMessageStore" data-source="myDataSource" table-prefix="MY_INT_"/>
<!-- Main entry point into the process -->
<integration:gateway id="myGateway"
service-interface="com.mycompany.myproject.integration.gateways.myGateway"
default-request-channel="myGatewayChannel"
/>
<!-- Map the initial input channel to the first step, MyFirstService -->
<integration:channel id="myGatewayChannel">
<integration:queue capacity="1000"/>
<integration:queue message-store="myMessageStore" capacity="1000"/>
</integration:channel>
<!-- Step 1: My First Service -->
<integration:service-activator
id="myFirstServiceActivator"
input-channel="myGatewayChannel"
output-channel="myNextChannel"
ref="myFirstService"
method="process"/>
<!-- LONG running process. Setup asynchronous queue channel. -->
<integration:channel id="myNextChannel">
<integration:queue capacity="1000"/>
<integration:queue message-store="myMessageStore" capacity="1000"/>
</integration:channel>