ActiveMQ ssl 连接超过一定时间发送数据就会失败
Transport (ssl://ip:port?wireFormat.maxInactivityDuration=0&trace=true&keepAlive=true) failed , attempting to automatically reconnect: {}
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
at org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50)
at org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:634)
at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:59)
at org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:619)
at java.io.DataInputStream.readInt(DataInputStream.java:387)
at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268)
at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240)
at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232)
at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
at java.lang.Thread.run(Thread.java:745)
配置文件
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQSslConnectionFactory">
<!-- activeMQ url -->
<property name="brokerURL" value="${mq.brokerURL}" />
<property name="userName" value="${mq.userName}"/>
<property name="password" value="${mq.password}" />
<property name="keyStore" value="client.ks" />
<property name="trustStore" value="client.ts" />
<property name="keyStorePassword" value="password" />
<property name="trustStorePassword" value="password" />
<property name="useAsyncSend" value="true"/>
<!-- 设置消息发送者在累计发送102400byte大小的消息后
等待服务端进行回执,以便确定之前发送的消息是否被正确处理,
确定服务器端是否产生了过量的消息堆积,需要减慢消息生产端的生产速度 -->
<property name="producerWindowSize" value="102400"/>
<property name="redeliveryPolicy" ref="activeMQRedeliveryPolicy" />
</bean>
<!-- Spring Caching连接工厂 -->
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<!--目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<property name="reconnectOnException" value="true"/>
<property name="cacheConsumers" value="false"/>
<property name="cacheProducers" value="false"/>
<!-- Session缓存数量 -->
<property name="sessionCacheSize" value="${mq.sessionCacheSize}" />
</bean>
<!-- Spring JmsTemplate 的消息生产者================================================ start-->
<!-- 定义JmsTemplate的Queue类型 -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<constructor-arg ref="connectionFactory" />
<!-- 非pub/sub模型(发布/订阅),即队列模式 -->
<property name="pubSubDomain" value="false" />
<property name="defaultDestinationName" value="${queueName}"></property>
<property name="explicitQosEnabled" value="true"/>
<!-- 是否持久化 DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 -->
<property name="deliveryMode" value="2" />
<property name="sessionTransacted" value="true"/>
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/>
</bean>
<!--Spring JmsTemplate 的消息生产者=================================================== end-->
<!--这个是sessionAwareQueue目的地 -->
<bean id="sessionAwareQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg>
<value>${queueName}</value>
</constructor-arg>
</bean>
<!-- 消息消费者===================================================================== start-->
<bean id="sessionAwareListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="sessionAwareQueue" />
<property name="messageListener" ref="queueReceiver" />
<property name="messageSelector" value="${messageSelector}"></property>
<property name="pubSubNoLocal" value="false"></property>
<property name="sessionTransacted" value="true"/>
</bean>
<!-- 消息消费者===================================================================== end -->
坐等急求大神解答, 本人头一次使用mq, 有什么问题请多多指导, 谢谢