我正在使用 Spring Integration 向 Red Hat AMQ 7.8.2 上的 JMS 主题生成消息。应用程序启动/重新启动时发送第一条消息需要 3 到 4 秒,而发送第一条消息后的消息则需要 40 到 50 毫秒。创建连接工厂并为第一条消息建立与代理的连接可能需要 3 到 4 秒。
<si-jms:outbound-channel-adapter id="communication"
connection-factory="connectionFactoryCached"
channel="communicationChannel"
destination-name="${communications.topic}"
pub-sub-domain="true" />
<bean id="connectionFactory"
class="javax.jms.ConnectionFactory"
factory-bean="simpleAmqConnectionFactory"
factory-method="createConnectionFactory" />
<bean id="connectionFactoryCached"
class="org.springframework.jms.connection.CachingConnectionFactory"
p:targetConnectionFactory-ref="connectionFactory"
p:sessionCacheSize="3" />
当第一次沟通发生时,发生了很多可能的原因:
创建连接:第一次发送消息时,将使用 AMQ 代理创建连接。这有很多东西,比如网络通信、身份验证。会话设置等,这通常需要一些时间。
资源管理:第一条消息,Spring集成需要分配然后配置
ConnectionFactory
、Connection
、Session
、MessageProducer
等资源。这通常是一个单一的时间成本,对于以后的消息来说不会发生。
其他因素:
现在来说说解决方案: 调整连接,以便在应用程序启动期间设置所有 JMS 连接相关资源。当您启动应用程序建立连接时,只需向虚拟主题发送一条虚拟消息即可使连接过程在启动期间完成。
也许使用连接池。这允许重复使用连接,而不是每次都创建新连接。
如果可以,请发送异步消息,以便您的应用程序不必等待连接。