【问题标题】:Is maintenance on long lived JMS connections necessary?是否需要维护长期 JMS 连接?
【发布时间】:2010-09-25 07:29:24
【问题描述】:

我保持 JMS 连接始终打开,因为上面有一个 MessageListener。

是否普遍需要担心使用长期 JMS 连接来最小化应用程序的维护?

我正在考虑尝试从一些常见的众所周知的故障中恢复,例如临时连接故障。

【问题讨论】:

    标签: connection integration jms


    【解决方案1】:

    据我所知,标准 JMS 规范中没有任何内容可以确保应用程序不会看到连接问题。也许有些供应商将其作为扩展(正如 James Strachan 所建议的那样)。

    如果您想要一个不依赖于供应商扩展的健壮 JMS 客户端,您需要处理错误并重新连接。请参阅Reconnecting JMS listener to JBossMQ(尽管有标题,但它不是 JBossMQ 特定的)。

    【讨论】:

      【解决方案2】:

      一个好的 JMS 提供者将处理网络中断,例如丢失的套接字或消息代理故障转移或重新启动。例如这是enable automatic reconnectionApache ActiveMQ 中的方式。

      重新创建所有 JMS 资源(连接、会话、生产者、消费者)通常很痛苦 - JMS 提供者为你做这件事要容易得多。

      如果您必须使用不支持此功能的提供程序 - 请考虑切换,或使用 Spring JMS 帮助程序类,它可以为您完成其中的一些工作。

      【讨论】:

        【解决方案3】:

        您需要处理两种情况:

        1. 您和 JMS 服务器之间的防火墙。大多数防火墙会在几个小时后切断“空闲”连接。如果是这种情况,请每隔一小时左右发送一条消息,或者,如果可以,启用 TCP_KEEPALIVE。这是一个 TCP/IP 选项,它将导致底层套接字在一段时间后发送测试消息。
        2. 另一台服务器已重新启动。发生这种情况时,您将在尝试发送下一条消息时收到“连接丢失”错误。在这种情况下,只需再次打开连接并重试即可。

        我建议安装本地 JMS 服务器(任何都可以),将您的应用程序连接到它并停止服务器。这将为您提供案例 #2 的错误消息。然后使用MockRunner 编写单元测试以确保您的错误处理正确。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-05
          • 2019-05-10
          • 2012-05-12
          • 1970-01-01
          • 2011-03-10
          • 2014-07-22
          • 2010-09-21
          • 2013-03-04
          相关资源
          最近更新 更多