我的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…