从 Spring Integration 向 JMS 主题发送第一条消息需要太长时间

问题描述 投票:0回答:1

我正在使用 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" />
java spring-integration amq spring-integration-amqp
1个回答
0
投票

当第一次沟通发生时,发生了很多可能的原因:

  • 创建连接:第一次发送消息时,将使用 AMQ 代理创建连接。这有很多东西,比如网络通信、身份验证。会话设置等,这通常需要一些时间。

  • 资源管理:第一条消息,Spring集成需要分配然后配置

    ConnectionFactory
    Connection
    Session
    MessageProducer
    等资源。这通常是一个单一的时间成本,对于以后的消息来说不会发生。

  • 其他因素

    • 解决目的地
    • JMS 提供程序启动

现在来说说解决方案: 调整连接,以便在应用程序启动期间设置所有 JMS 连接相关资源。当您启动应用程序建立连接时,只需向虚拟主题发送一条虚拟消息即可使连接过程在启动期间完成。

也许使用连接池。这允许重复使用连接,而不是每次都创建新连接。

如果可以,请发送异步消息,以便您的应用程序不必等待连接。

© www.soinside.com 2019 - 2024. All rights reserved.