我正在使用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秒超时。显然某些地方会出现一些延迟加载。
我的问题是,如何在启动时进行完全初始化以避免第一个请求总是超时?
干杯,
彼得
答案 0 :(得分:1)
可能是连接建立问题。
您可以做的一件事是将供应商ConnectionFactory包装在Spring CachingConnectionFactory中(出于性能原因,无论如何都要这样做),并在初始化期间调用createConnection()。
有很多方法可以做到这一点 - 包括使用init-method,@ PostConstruct方法或带有afterPropertiesSet()的InitializingBean将连接工厂注入到其他bean中;它将在上下文初始化期间被调用。
这将导致缓存连接急切连接。
您可能希望在try块中执行此操作,以避免应用程序上下文无法初始化,因为JMS代理不可用(当然消息传递仍然会失败,但应用程序将在代理时启动并准备连接可用)。