我保持 JMS 连接始终打开,因为上面有一个 MessageListener。
是否普遍需要担心使用长期 JMS 连接来最小化应用程序的维护?
我正在考虑尝试从一些可能常见的众所周知的故障中恢复,例如临时连接故障。
我保持 JMS 连接始终打开,因为上面有一个 MessageListener。
是否普遍需要担心使用长期 JMS 连接来最小化应用程序的维护?
我正在考虑尝试从一些可能常见的众所周知的故障中恢复,例如临时连接故障。
一个好的 JMS 提供者将处理网络中断,例如丢失的套接字或消息代理故障转移或重新启动。例如,这是在Apache ActiveMQ中启用自动重新连接的方法。
重新创建所有 JMS 资源(连接、会话、生产者、消费者)通常很痛苦——JMS 提供者为你做这件事要容易得多。
如果您必须使用不支持此功能的提供程序 - 请考虑切换或使用 Spring JMS 帮助程序类,它可以为您完成其中的一些工作。
您将需要处理两种情况:
我建议安装本地 JMS 服务器(任何都可以),将您的应用程序连接到它并停止服务器。这将为您提供案例 #2 的错误消息。然后用MockRunner编写一个单元测试来确保你的错误处理是正确的。
我所知道的标准 JMS 规范中没有任何内容可以确保应用程序不会看到连接问题。也许有一些供应商将其作为扩展(正如 James Strachan 所建议的那样)。
如果您想要一个不依赖于供应商扩展的健壮 JMS 客户端,您需要处理错误并进行重新连接。请参阅将 JMS 侦听器重新连接到 JBossMQ(尽管标题如此,但它不是 JBossMQ 特定的)。