Spring-JMS,在几次JMS activemq服务器启动/停止之后,侦听器服务器抛出java.io.EOFException,然后不连接到正在运行的JMS - java

我的spring上下文文件中有以下设置。

<bean id="amqPowerConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <constructor-arg index="0" value="${power.messagebrokerurl}"/>
</bean>

<bean id="powerConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="amqPowerConnectionFactory"/>
</bean>

<bean id="powerEventQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="PowerEventQueue"/>
</bean>

<bean id="timeSeriesChangesContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="powerConnectionFactory"/>
    <property name="destination" ref="powerEventQueue"/>
    <property name="messageListener" ref="timeSeriesDataAdapter"/>
    <property name="recoveryInterval" value="5000"/>
</bean>

<bean id="timeSeriesDataAdapter" class="com.sungard.energy.aligne.aligneweb.assetManagement.TimeSeriesMessageAdapter">
    <property name="queueName"><value>"PowerEventQueue"</value></property>
    <property name="messageHandler"  ref="timeSeriesMessageHandler"/>
</bean>

<bean id="timeSeriesMessageHandler" class="com.sungard.energy.aligne.aligneweb.assetManagement.TimeSeriesMessageHandler">
</bean>

“ $ {power.messagebrokerurl}”是tcp:// localhost:61616,即在计算机上本地运行的JMS activemq。

App Server正在侦听此activemq jms,当jms断开时,应用服务器会显示以下消息,这是正确的,因为JMS实际上已关闭,并且它试图每5秒查看一次它是否启动。

    WARN DefaultMessageListenerContainer:844 - Setup of JMS message listener invoker failed for destination 'queue://PowerEventQueue' - trying to recover. Cause: The *Consumer* is closed
Could not refresh JMS Connection for destination 'queue://PowerEventQueue' - retrying in 5000 ms. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect

现在,当我重新启动JMS时,应用服务器成功连接到它并显示以下消息。

INFO DefaultMessageListenerContainer:893 - Successfully refreshed JMS Connection
WARN CachingConnectionFactory:301 - Encountered a JMSException - resetting the underlying JMS Connection

现在,当我再次关闭JMS服务器时,appserver而不是显示连接被拒绝,将显示以下消息。

WARN DefaultMessageListenerContainer:844 - Setup of JMS message listener invoker failed for destination 'queue://PowerEventQueue' - trying to recover. Cause: The Session is closed
INFO CachingConnectionFactory:291 - Established shared JMS Connection: ActiveMQConnection {id=ID:ap-pun-ws0430-53381-1437557704588-0:28,clientId=null,started=false}
ERROR DefaultMessageListenerContainer:909 - Could not refresh JMS Connection for destination 'queue://PowerEventQueue' - retrying in 1000 ms. Cause: The JMS connection has failed: java.io.EOFException

现在,即使我启动了JMS服务器,appserver也不会重新连接到它,并不断抛出java.io.EOFException

我观察到的事情是,在成功重新连接到JMS之前,日志消息的一部分说,
原因:消费者已关闭

在其他情况下,它说
原因:会话关闭
还有下面的一行

INFO CachingConnectionFactory:291 - Established shared JMS Connection: ActiveMQConnection {id=ID:ap-pun-ws0430-53381-1437557704588-0:28,clientId=null,started=false}

java参考方案

power.messagebrokerurl的值设置为

power.messagebrokerurl=tcp://localhost:61616

如果在开始时添加故障转移,则看不到此错误。

power.messagebrokerurl=failover:tcp://localhost:61616

更新:通过以上设置,侦听器服务器始终希望JMS在启动时就可以启动并运行。因此,我必须添加startupMaxReconnectAttempts属性,其值为1。默认情况下,其值为-1(我使用的是ActiveMQ 5.5.0),这表示传输对初始连接尝试的次数没有限制,这就是侦听器服务器的原因。没有开始。

power.messagebrokerurl=failover:(tcp://localhost:61616)?startupMaxReconnectAttempts=1

您可以参考http://activemq.apache.org/failover-transport-reference.html的所有传输选项。

IntelliJ Spring MVC教程部署 - java

我尝试了tutorial,当我尝试部署webapp(IntelliJ 13.1.4 Ultimate)时,出现了一个奇怪的错误,如下面的屏幕快照所示。解决此错误的方法是什么? org.jdom.input.JDOMParseException: Error on line 742: The content of elements must consist o…

Spring MVC:如何获取请求的处理程序方法 - java

我正在尝试根据Spring @RequestMapping注释方法上存在的注释实现一些逻辑。因此,我的方法中有一个HttpServletRequest实例,我想问一下spring“给我一个方法,该方法将被调用以处理此请求”,因此我可以使用反射API来询问是否存在我的注释,因此我可以更改处理。有什么简单的方法可以从Spring MVC获取此信息? java大神…

Spring Boot如何在POST之后返回响应 - java

我想创建一个新客户并在创建客户后返回客户编号。客户编号必须是从50000开始的自动递增的唯一编号。到目前为止,我已经成功创建了一个客户,但是我不确定应该如何生成客户编号,将其保存到数据库中,并在触发POST时将其作为成功消息显示给用户。json下面是所需的响应;{ "customerNumber": "50002", …

Spring MVC拦截器映射问题 - java

我有这段XML:<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/statics/**" /> <bean class="com.company.website.servlet.StaticsHandlerIntercept…

春天的多属性文件 - java

我在spring中加载属性文件: <context:property-placeholder location="classpath:foo.properties"/> 但是,如果我尝试在另一个上下文文件中加载另一个文件,则会出现错误。 java大神给出的解决方案 如果您需要覆盖属性,则可以执行以下操作:<context…