0

クライアントから送信されたメッセージをデータベースに永続化するためにSpring Integration 2.1を使用しています。

カスタム アダプタによって埋められるキューがあります。構成されたサービスアクティベーターは、このキューをポーリングし、Spring 管理の @Repository Bean にメッセージをリリースします。すべてのエラーはエラー チャネルにキャプチャされ、サービスによって処理されます。構成はこれまでのところ正常に機能します。

私の懸念は、データベースが利用できない場合、サービスアクティベーターがキューからのすべての着信メッセージをポーリングし、それらをエラーチャネルに入れることです。たとえばテストクエリを送信するなどして、データベースが明らかに利用できない場合に、サービスアクティベーターがメッセージをポーリングするのを防ぐ方法はありますか?

私の構成:

<int:channel id="inChannel">
   <int:queue />
</int:channel>
<bean id="service" class="some.service.Service" />
<int:service-activator ref="service" 
      method="write" input-channel="inChannel">
   <int:poller fixed-rate="100" task-executor="srvTaskExecutor" 
      receive-timeout="90" error-channel="errChannel" />        
</int:service-activator>
<task:executor id="srvTaskExecutor" pool-size="2-10" 
      queue-capacity="0" rejection-policy="DISCARD" />
<int:channel id="errChannel" />
<int:service-activator input-channel="errChannel" 
      ref="errorService" method="write"/>

よろしく。

4

1 に答える 1

1

ポーリングサービスアクティベータに「id」を指定すると、そのインスタンスを参照し、DBが使用可能かどうかに基づいてそのインスタンスでstart()またはstop()を呼び出すことができます。ほとんどの場合、そのservice-activatorにもauto-startup="false"を設定することをお勧めします。

さらに、「control-bus」要素を定義してから、「myActivator.start()」や「myActivator.stop()」などのメッセージをその制御バスの入力チャネルに送信することもできます。

お役に立てば幸い、マーク

于 2012-02-16T16:14:58.943 に答える