我正在使用 Spring 的
JmsTemplate
、CachingConnectionFactory
和 JmsTransactionManager
来提交或回滚向 IBM MQ 发送消息。我有多个 MQ 主机,并且在其之上有一个负载均衡器,可以将消息重定向到任何一台 MQ 主机。
我正在使用负载均衡器主机建立连接。如果我重新启动(优雅/强制)负载均衡器后面的任何一台 MQ 主机,那么已经建立/缓存的连接会发生什么情况?我们不希望任何消息丢失。
我不是 Spring 或 IBM MQ 方面的专家,但我已经使用 JMS(主要开发 ActiveMQ)很长时间了,所以我也许可以为您澄清一些事情。
JMS 连接是有状态的,因此一旦与其中一台 MQ 主机建立连接,它将保持与该主机的连接,直到客户端的主机发生故障关闭连接。这与 HTTP 等协议的无状态连接形成鲜明对比,后者通常使用负载平衡器来提高性能。因此,负载均衡器对于 JMS 并不是特别有用。
如果您重新启动(优雅/强制)负载均衡器后面的任何一台 MQ 主机,则与该主机的任何已建立/缓存的连接都将丢失。此外,当连接丢失时,任何正在进行的事务都将被回滚。您不应该丢失任何消息,但 Spring 将必须重新创建连接,并且您的应用程序需要重复任何失败的操作。