2012-04-26 16 views
0

私はアクティブなmq経由で通信するためにバネ統合を使用しています。私は次の設定を持っている。起動時にスプリング統合:ゲートウェイを初期化するにはどうすればよいですか?

<integration:channel id="riskApprovalRequestChannel"/> 
    <integration:channel id="riskApprovalResponseChannel"/> 

    <jms:outbound-gateway id="riskApprovalServiceGateway" 
          request-destination-name="${risk.approval.queue.request}" 
          reply-destination-name="${risk.approval.queue.response}" 
          request-channel="riskApprovalRequestChannel" 
          reply-channel="riskApprovalResponseChannel" 
          connection-factory="jmsConnectionFactory" 
          receive-timeout="1000"/> 

    <integration:gateway id="riskApprovalService" service-interface="com.my.ServiceInterface" 
         default-request-channel="riskApprovalRequestChannel" 
         default-reply-channel="riskApprovalResponseChannel"/> 

これは、遅い第1の要求を除いてうまく動作します。私はいつも1回目のリクエストで1秒のタイムアウトに当たった。明らかにどこかで怠惰な読み込みがあります。

私の質問は、最初のリクエストがいつもタイムアウトするのを避けるために、起動時に完全な初期化を行うにはどうすればよいですか?

乾杯、

ピーター

答えて

1

それはおそらく問題だコネクションの確立です。

Spring CachingConnectionFactoryでベンダーのConnectionFactoryをラップして(パフォーマンス上の理由からこれを行うための良いアイデア)、初期化中にcreateConnection()を呼び出します。

他のBeanに接続ファクトリを挿入する方法、initメソッド、@PostConstructメソッド、またはafterPropertiesSet()を使用してInitializingBeanを挿入する方法など、さまざまな方法があります。コンテキストの初期化中に呼び出されます。

これにより、キャッシュの接続が賢く接続されます。

JMSブローカーが使用できないためにアプリケーションコンテキストが初期化に失敗することを避けるためにtryブロックで行うことができます(もちろんメッセージングは​​失敗しますが、アプリケーションは起動し、ブローカーが利用可能です)。

+0

Russel:私はすでにSpring CachingConnectinoFactoryを使用しています。 init-method = "createConnection"を追加することで問題は修正されましたが、孤立した接続も浮かび上がってしまうことが考えられます。私は仕事をしていると思われる を使用して終了しました。 正しい方向に私を指摘して答えを受け入れました。 –

+0

CCFは単一の接続(セッション、消費者、およびプロデューサのキャッシュを追加するSingleConnectionFactoryのサブクラス)を使用するため、追加の接続は必要ありません。 –

+0

接続を熱心に作成するためにファクトリBeanを使用するのはすてきなトリックです。しかし、他のスレッドで指摘したように、initメソッドは必要ありません。再利用のために単一の接続が保持されているため、何もしません。 –