我们拥有一个由四个经纪人组成的网络,2个"前端"和2"后端" (我将它们称为FB1 FB2 BB1 BB2)。他们在一个像这样的广场联网:
FB1 .... FB2
. .
. .
. .
BB1 .... BB2
网络连接设置为排除特定队列,但允许转发所有其他队列和主题。网络连接器在前端和后端之间定义了故障转移,因此,例如,如果BB1发生故障,则FB1应该进行故障转移并建立与BB2的新网络连接。
连接到每对的客户端也使用故障转移,因此如果其中一对发生故障,则意味着故障转移到另一对并继续通信。即客户端连接到FB1,FB1失败,客户端故障转移到FB2。
在我的问题场景中,客户端向前端代理发送InOut(请求 - 回复)消息。前端代理将此消息转发给后端代理,在后端代理处消耗并生成响应。然后,响应通过临时队列反馈给原始客户端。
如果我在此次交换期间杀死其中一个经纪人,则客户端会成功故障转移给其他人。但是,后续的IntOut(请求 - 回复)消息失败,我看到例外情况:
org.springframework.jms.InvalidDestinationException: Cannot publish to a deleted Destination: temp-queue://I...
任何人都可以解释为什么会发生这种情况以及如何阻止它?
答案 0 :(得分:0)
临时队列未聚集。当您执行请求/回复时,您需要添加一些逻辑,以便在发生故障转移时为InOut重新创建临时队列 - 这不会自动发生。