0

私はSpringIntegrationを使用してアクティブ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秒のタイムアウトに達しました。明らかに、どこかで遅延読み込みが行われています。

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

乾杯、

ピーター

4

1 に答える 1

1

問題はおそらく接続の確立です。

できることの1つは、ベンダーのConnectionFactoryをSpring CachingConnectionFactoryでラップし(パフォーマンス上の理由から、とにかくこれを行うことをお勧めします)、初期化中にcreateConnection()を呼び出すことです。

これを行うには、いくつかの方法があります。たとえば、initメソッド、@ PostConstructメソッド、afterPropertiesSet()を使用したInitializingBeanを使用して、接続ファクトリを他のBeanに注入する方法があります。コンテキストの初期化中に呼び出されます。

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

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

于 2012-04-26T11:50:39.140 に答える