0

我正在使用 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 秒超时。显然某处发生了一些延迟加载。

我的问题是,如何在启动时进行完全初始化以避免第一个请求总是超时?

干杯,

彼得

4

1 回答 1

1

问题可能是建立连接。

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

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

这将导致缓存的连接被急切地连接。

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

于 2012-04-26T11:50:39.140 回答