是否需要维护长期的JMS连接?

时间:2008-12-04 11:24:35

标签: connection integration jms

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

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

我正在考虑尝试从一些可能常见的常见故障类型中恢复,例如临时连接故障。

3 个答案:

答案 0 :(得分:3)

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

重新创建所有JMS资源(连接,会话,生产者,消费者)通常非常困难 - JMS提供程序更容易为您完成。

如果必须使用不支持此功能的提供程序 - 请考虑切换,或使用可以为您执行此操作的Spring JMS帮助程序类。

答案 1 :(得分:1)

您需要处理两种情况:

  1. 您与JMS服务器之间的防火墙。大多数防火墙将在几个小时后切断“空闲”连接。如果是这种情况,请每小时左右发送一条消息,或者,如果可以,则启用TCP_KEEPALIVE。这是一个TCP / IP选项,它将导致底层套接字在一段时间后发送测试消息。
  2. 重启其他服务器。发生这种情况时,当您尝试发送下一条消息时,您将收到“连接丢失”错误。在这种情况下,只需再次打开连接,然后重试。
  3. 我建议安装一个本地JMS服务器(任何会这样做),将你的应用程序连接到它并停止服务器。这将为您提供案例#2的错误消息。然后使用MockRunner编写单元测试,以确保错误处理正确。

答案 2 :(得分:1)

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

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