gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:24:24 34 4
gpt4 key购买 nike

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

应用程序服务器正在监听此 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 服务器时,应用程序服务器不再显示连接被拒绝,而是显示以下消息。

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 之前,日志消息的一部分显示, 原因:消费者已关闭

在其他情况下它说原因: session 已关闭还有以下行

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

最佳答案

power.messagebrokerurl 的值已设置为

power.messagebrokerurl=tcp://localhost:61616

如果我在开头添加故障转移,则不会看到此错误。

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

更新:通过上述设置,监听器服务器始终期望 JMS 在启动时启动并运行。所以我必须添加值为1的 startupMaxReconnectAttempts 属性。默认情况下它的值为-1(我使用的是ActiveMQ 5.5.0),这意味着传输对初始连接的数量没有限制尝试,这就是监听器服务器未启动的原因。

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

您可以引用http://activemq.apache.org/failover-transport-reference.html所有交通选项。

关于java - Spring - JMS,在 JMS activemq 服务器启动/停止几次后,监听器服务器抛出 java.io.EOFException,然后不连接到正在运行的 JMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561649/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com