网络故障后重新连接ActiveMQ服务器

2024-02-08

我们正在使用 ActiveMQ 5.8.0 通过 TCP 将 Java 应用程序连接到另一个系统。 请求/回复(与对临时队列的回复同步)与我们的客户端及其相应部分配合良好。

但我们不确定如何处理“异常”情况,例如短暂的网络故障。 我们正在测试应用程序在套接字重新连接后是否可以正常继续工作。

但直到现在我们还无法做到这一点,因为客户端似乎没有按预期自动重新连接到代理。 我们考虑过在自己的 TransportListener 中自己实现它,但不建议这样做(请参阅传输侦听器和 ActiveMq 重新启动 https://stackoverflow.com/questions/14172547/transport-listener-and-activemq-restart,其中 ActiveMQ 成员 Tim Bish 提示使用故障转移协议)。 但是,如果其中一个代理出现故障,故障转移只会设法切换到另一个代理,对吧?

目前,我们仅使用 TransportListener 来监视日志文件中的连接状态,这会导致一些日志条目,如以下或类似的(发布在下面的长日志中)。

ActiveMQ 连接执行器:... 生产者收到:java.net.SocketException:...

class ConnectionStateMonitor
    implements TransportListener
{
    @Override
    public void onCommand(Object command)
    {
        logInfo("Producer received: " + command);
    }

    @Override
    public void onException(IOException exception)
    {
        logError("Producer received: " + exception);
    }

    @Override
    public void transportInterupted()
    {
        logError("Producer received transport interuption.");
    }

    @Override
    public void transportResumed()
    {
        logInfo("Producer received transport resumption.");
    }
}

抱歉,在下面发布了带有堆栈跟踪的长日志摘录,但也许有人会立即看到缺少的内容。

我们目前正在使用以下设置:

  • 线格式.maxInactivityDuration=20000
  • 回复的最长等待时间:10000 毫秒

有什么想法可以解决这个问题(以及如何格式化下面的日志)?

提前致谢!

2013-06-05 14:09:21,676|main |信号|DEBUG|等待60000 2013-06-05 14:09:30,279|ActiveMQ InactivityMonitor WriteCheckTimer|AbstractInactivityMonitor|调试|WriteChecker 6666 毫秒 自上次写检查以来已过去。 2013-06-05 14:09:30,282|ActiveMQ InactivityMonitor Worker|AbstractInactivityMonitor|DEBUG|正在运行 写检查[tcp://192.168.1.29:61616] 2013-06-05 14:09:36,945|ActiveMQ 不活动监视器 WriteCheckTimer|AbstractInactivityMonitor|调试|WriteChecker 6666 毫秒 自上次写检查以来已过去。 2013-06-05 14:09:36,945|ActiveMQ InactivityMonitor Worker|AbstractInactivityMonitor|DEBUG|正在运行 WriteCheck[tcp://192.168.1.29:61616] 2013-06-05 14:09:40,579|ActiveMQ 运输: tcp://test-server/192.168.1.29:61616@54127|ThreadPoolUtils|调试|关闭 ExecutorService: java.util.concurrent.ThreadPoolExecutor@13e0aba 是 关闭: true 和终止: false 花费: 0.000 秒。造成原因: javax.jms.JMSException:连接重置于 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) 在 org.apache.activemq.ActiveMQMessageProducer。(ActiveMQMessageProducer.java:125) 在 org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956) 在 de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218) ... 4 更多 2013-06-05 14:09:40,579|ActiveMQ 传输: tcp://test-server/192.168.1.29:61616@54127|ActiveMQConnection|调试|异步 没有异常监听器的异常:java.net.SocketException: 连接重置 java.net.SocketException:连接重置于 java.net.SocketInputStream.read(来源未知)位于 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 在 org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:589) 在 java.io.DataInputStream.readInt(来源未知) org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) 在 java.lang.Thread.run(来源不明) 造成的: java.net.SocketException:连接重置于 java.net.SocketInputStream.read(来源未知)位于 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 在 org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:589) 在 java.io.DataInputStream.readInt(来源未知) org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) ... 1 更多 2013-06-05 14:09:40,583|ActiveMQ 连接执行器: tcp://test-server/192.168.1.29:61616@54127|TcpTransport|调试|停止 传输 tcp://test-server/192.168.1.29:61616@54127 2013-06-05 14:09:40,583|ActiveMQ 连接执行器: tcp://test-server/192.168.1.29:61616@54127|TaskRunnerFactory|调试|初始化 使用 ExecutorService 的 TaskRunnerFactory[ActiveMQ Task]: java.util.concurrent.ThreadPoolExecutor@186f247 2013-06-05 14:09:40,584|ActiveMQ 任务 1 |TcpTransport|DEBUG|关闭套接字 套接字[地址=测试服务器/192.168.1.29,端口=61616,本地端口=54127] 引起原因:javax.jms.JMSException:连接重置于 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) 在 org.apache.activemq.ActiveMQMessageProducer.(ActiveMQMessageProducer.java:125) 在 org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956) 在 de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218) ... 4 更多 引起:java.net.SocketException:连接重置于 java.net.SocketInputStream.read(来源未知)位于 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 在 org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:589) 在 java.io.DataInputStream.readInt(来源未知) org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) ... 1 更多 2013-06-05 14:09:40,584|ActiveMQ 连接执行器: tcp://test-server/192.168.1.29:61616@54127|ThreadPoolUtils|调试|强制 关闭ExecutorService: java.util.concurrent.ThreadPoolExecutor@186f247 原因: javax.jms.JMSException:连接重置于 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391) 在 org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912) 在 org.apache.activemq.ActiveMQMessageProducer。(ActiveMQMessageProducer.java:125) 在 org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956) 在 de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218) ... 4 更多 引起:java.net.SocketException:连接重置于 java.net.SocketInputStream.read(来源未知)位于 org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 在 org.apache.activemq.transport.tcp.TcpTransport$2.fill(TcpTransport.java:604) 在 org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 在 org.apache.activemq.transport.tcp.TcpTransport$2.read(TcpTransport.java:589) 在 java.io.DataInputStream.readInt(来源未知) org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 在 org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) 在 org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213) 在 org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) ... 1 更多 2013-06-05 14:09:40,587|ActiveMQ 连接执行器: tcp://test-server/192.168.1.29:61616@54127|ActiveMqConnectionImpl|错误|生产者收到:java.net.SocketException:连接重置


听起来故障转移绝对是您想要使用的东西。您不需要故障转移到另一个代理 - URI 只是指示客户端库重新连接,因此您可以执行以下操作:

failover:(tcp://myBroker:61616)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络故障后重新连接ActiveMQ服务器 的相关文章

  • Activemq 关闭失败然后终止进程

    我正在实施复制的 leveldb activemq 设置 我有 3 个 activemq 实例在同一个盒子上运行 我正在配置文件中更改它们的 rmiPort amqpport 和 openwire 端口 配置看起来像这样
  • ActiveMQ Artemis 前缀为“jms.topic”。到 Spring Boot 客户端上定义的所有主题名称

    我正在使用 ActiveMQ Artemis 2 18 0 和版本 2 5 5spring boot starter artemis对 Spring Boot 客户端的依赖 在我的用例中 客户需要通过主题相互通信 问题是字符串jms top
  • 如何在Mule中创建独占队列消费者?

    在 ActiveMQ 中 您可以为队列配置独占消费者 例如 Queue Name Here consumer exclusive true 如何在 Mule 中配置像上面这样的独占消费者 您需要对队列名称进行 URL 编码 因为 Mule
  • 有没有办法更改 Nifi 中 PublishJMS 处理器的交付模式?

    我使用 Nifi PublishJMS 处理器向 IBM MQ 发送消息 消息在 MQ 中具有持久性 持久性 我想将其更改为非持久性 Nifi PublishJms 处理器中是否有属性可以纠正此问题 或者是从MQ端完成的 我无权访问 MQ
  • 在提交事务之前传送 JMS 消息

    我有一个非常简单的场景 涉及database and a JMS在应用程序服务器 Glassfish 中 场景非常简单 1 an EJB inserts a row in the database and sends a message 2
  • 如何使用XML/XSD定义JAXB抽象类并实现继承?

    寻找一种方法来定义基本 XML 模式 以便在其他模式上重用为 XML 消息 这些消息将用于不同的 JMS 消息负载 其目的是 XmlMessage 定义所有消息都将作为其发送的消息基类 标头 所有消息都将具有的包含有关消息的元数据的类 Bo
  • 在 JMS 队列中使用 Ruby,而不是 JRuby?

    使用 Ruby 而不是 JRuby 将消息推送到 JMS 队列 由 Tibco EMS 托管 的最简单方法是什么 Stomp http docs codehaus org display STOMP Home是一种机制 允许任意客户 htt
  • 从 HTTP 端点发送消息到 JMS

    我正在尝试使用骆驼路由 它将接受 http 端点上的有效负载 然后将该有效负载写入 JMS 队列 到目前为止我所拥有的路线如下 但是一条空消息被传递到 jms 队列 消息到达那里 但没有正文 路线如下
  • 将 EJB Jar 部署到 Glassfish 时出现异常

    这是我第一次尝试使用 JMS 我已经成功创建 部署了一个 war 文件 其中包含一个可用于上传文件的 servlet 上传文件时 它会向 JMS 队列发送一条消息 接下来 我编写了一个侦听器来从队列中检索上传的消息 但是当我尝试部署它时 出
  • JMS 有哪些替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用JMS临时队列进行同步使用是一个好习惯吗?

    如果我们使用 临时队列 的 JMS 请求 回复机制 该代码是否可扩展 截至目前 我们不知道是否会支持每秒 100 个请求 或者每秒 1000 个请求 下面的代码是我正在考虑实现的代码 它以 同步 方式使用 JMS 关键部分是创建 消费者 以
  • 基于 Spring Boot AMQP 的 JmsListener 在 TextMessage 上失败

    我有一个 Spring Boot 应用程序 在检索类型的 JMS 消息时遇到问题TextMessage来自 ActiveMQ 代理 如果消费者尝试从代理检索消息 它无法自动将消息转换为 TextMessage 而是将其视为 ByteMess
  • 从远程应用程序服务器连接到 Websphere Liberty jmsServer

    是否可以从远程应用程序服务器连接到部署在 Websphere Liberty 中的队列 我使用该产品的免费版本 Liberty 8 5 5 7 我在 server xml 中配置了连接工厂
  • 如何找出 JMS 主题的所有订阅者都已回复?

    使用HornetQ 在JBoss AS 6 0中 我想设置一个多个客户端可以订阅的JMS主题 生产者定期向该主题发送一条带有回复目的地的消息 所有订阅者都应该回复该消息 我遇到的问题是我不完全确定如何检查所有订阅者是否确实回复了 一种解决方
  • JMS 客户端应用程序错误。无法使用 URL 连接

    我正在 C 上编写客户端应用程序以连接到我的本地 JMS Weblogic Server 12c 我尝试使用这里的示例代码 http docs oracle com cd E15523 01 web 1111 e13746 app exam
  • 如何将 activemq-core.xsd url 与 jar 文件中找到的 activemq.xsd 关联?

    有人知道如何关联activemq core xsd网址与activemq xsd在 jar 文件 activemq core 5 2 0 jar 中找到 我在互联网上找到了一些解决方案 但没有成功 我收到此错误 Caused by org
  • ActiveMQ 内存消耗通过屋顶(页面文件)...该怎么办?

    我们使用的是旧版本的 ActiveMQ 5 3 2 请参阅 ActiveMQ可靠吗 https stackoverflow com questions 4303610 is activemq reliable 我们取消了持久性 因为我们需要
  • 持久订阅 ActiveMQ

    我正在尝试为我的消息设置持久订阅者 以便即使在服务器重新启动后它们也能保留在主题中 但在配置过程中我收到与 xml 相关的错误 这是我的配置 xml
  • 与竞争的消费者顺序处理消息

    Problem 我以特定顺序 FIFO 在队列上接收消息 比如订单 我的队列中有竞争的消费者 为了进一步增加复杂性 消费者可能只对订单的特定版本感兴趣 具体取决于其状态 例如版本 1 版本 2 和版本 5 订单版本号在订单上可用 但不能用于
  • IBM MQ - 如何使用多个连接名称连接到队列管理器(一个是故障转移)

    我对 IBM MQ 还很陌生 我的是一个多实例队列管理器 一种情况就像故障转移 即使其中之一已关闭 我如何才能连接到它们 我不确定我的术语是否正确 我现在尝试使用下面的示例进行连接 https raw githubusercontent c

随机推荐