如何启动spring集成:启动时的网关?

时间:2012-04-26 04:10:56

标签: java spring spring-integration

我正在使用spring集成通过活动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 个答案:

答案 0 :(得分:1)

可能是连接建立问题。

您可以做的一件事是将供应商ConnectionFactory包装在Spring CachingConnectionFactory中(出于性能原因,无论如何都要这样做),并在初始化期间调用createConnection()。

有很多方法可以做到这一点 - 包括使用init-method,@ PostConstruct方法或带有afterPropertiesSet()的InitializingBean将连接工厂注入到其他bean中;它将在上下文初始化期间被调用。

这将导致缓存连接急切连接。

您可能希望在try块中执行此操作,以避免应用程序上下文无法初始化,因为JMS代理不可用(当然消息传递仍然会失败,但应用程序将在代理时启动并准备连接可用)。