我正在尝试配置一个稳定的连接,该连接不会因嵌入的ActiveMQ代理而超时。我在服务器端使用Camel + ActiveMQ + Spring进行配置。在我的代理配置中,我有以下配置,我已经尝试在传输连接器上设置connectionTimeOut,wireFormat.maxInactivityDuration = 0但是没有用,我在客户端使用StompClient连接ws://localhost:61614/stomp?useInactivityMonitor=false
。连接已建立,但它在300000ms之后超时,这似乎是默认空闲时间但无法将其关闭,请帮助在哪个级别配置以确保连接不会被丢弃:
<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&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
答案 0 :(得分:1)
原来是ActiveMQ下的Jetty造成了这个问题。它有一个默认的空闲时间超过300000ms,设置传输连接器如下将时间增加到设定值,将其设置为'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文档或其他任何地方找到此信息。很高兴看到为这种情况更新了文档。