【问题标题】:ActiveMQ configured with Camel+Spring idle time out setting not working使用 Camel+Spring 空闲超时设置配置的 ActiveMQ 不起作用
【发布时间】:2014-09-22 19:46:00
【问题描述】:

我正在尝试配置一个不会与嵌入式 ActiveMQ 代理超时的稳定连接。我正在使用 Camel+ActiveMQ+Spring 在服务器端进行配置。在我的代理配置中,我有以下配置,我尝试在传输连接器上设置 connectionTimeOut 、 wireFormat.maxInactivityDuration=0 但没有奏效,我正在使用 StompClient 在客户端连接ws://localhost:61614/stomp?useInactivityMonitor=false。连接已建立,但在 300000 毫秒后超时,这似乎是默认的空闲时间,但无法将其关闭,请帮助在哪个级别配置以确保连接不会丢失:

<broker id="broker" brokerName="myBroker" useShutdownHook="false" useJmx="true" dataDirectory="activemq-data"
               xmlns="http://activemq.apache.org/schema/core">
    <transportConnectors>
        <!-- vm transport for intra-jvm communication-->
        <transportConnector name="vm" uri="vm://myBroker?transport.useInactivityMonitor=false"/>
        <!-- tcp for external communication -->
        <transportConnector name="tcp" uri="tcp://localhost:61616?transport.useInactivityMonitor=false"/>
        <transportConnector name="ws" uri="ws://localhost:61614??transport.useInactivityMonitor=false"/>
        <transportConnector name="stomp" uri="stomp://localhost:61613?transport.useInactivityMonitor=false"/>
    </transportConnectors>

</broker>

<bean id="jmsConnectionFactory" 
   class="org.apache.activemq.ActiveMQConnectionFactory">
   <property name="brokerURL" value="vm://myBroker?create=false&amp;waitForStart=5000" />
</bean>

<bean id="pooledConnectionFactory" 
   class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
   <property name="maxConnections" value="12" />
   <property name="connectionFactory" ref="jmsConnectionFactory" />
   <property name="idleTimeout" value="120000" />
</bean>

<bean id="jmsConfig" 
   class="org.apache.camel.component.jms.JmsConfiguration">
   <property name="connectionFactory" ref="pooledConnectionFactory"/>
   <property name="concurrentConsumers" value="12"/>
   <property name="idleConsumerLimit" value="120000"/>
</bean>

<bean id="activemq" 
    class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig"/>
</bean>

在断开连接时将其记录在日志中:

WebSocketConnectionRFC6455     DEBUG ClosedOut WebSocketServletConnectionRFC6455 p=WebSocketParserRFC6455@3565d22 state=OPCODE buffer=null g=WebSocketGeneratorRFC6455@309b59a6 closed=false buffer=-1 1000 Idle for 300074ms > 300000ms

【问题讨论】:

    标签: spring websocket apache-camel activemq stomp


    【解决方案1】:

    原来是 ActiveMQ 下的 Jetty 导致了这个问题。它的默认空闲时间为 300000 毫秒,如下设置传输连接器会将超时时间增加到设置值,将其设置为“0”不会禁用不活动监视器,因为它建议用于“wireFormat.maxInactivityDuration=0”,并且单独使用“wireFormat.maxInactivityDuration=0”也不起作用:

    <transportConnectors>
        <!-- vm transport for intra-jvm communication-->
        <transportConnector name="vm" uri="vm://myBroker"/>
        <transportConnector name="ws" uri="ws://localhost:61614?websocket.maxIdleTime=7200000"/>
    </transportConnectors>
    

    在客户端,我有匹配的 URL 以防万一:“ws://localhost:61614?maxIdleTime=7200000”。 在常规 ActiveMQ 文档或其他任何地方都找不到这个。很高兴看到针对这种情况更新的文档。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2018-01-31
      • 2013-09-10
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多