假设下图中中间的消息队列失败了。发件人仍然可以获取使用其他消息队列发送的消息。
但是如果消息队列在收到消息后死亡会发生什么。发送方如何知道消息是否已发送给接收方以决定是否在不同的消息队列中重新发送?
类似地,如果接收者在消息队列将其消息传递给它之后死亡,会发生什么?发送者如何知道接收者是否满足了它的预期请求?
假设下图中中间的消息队列失败了。发件人仍然可以获取使用其他消息队列发送的消息。
但是如果消息队列在收到消息后死亡会发生什么。发送方如何知道消息是否已发送给接收方以决定是否在不同的消息队列中重新发送?
类似地,如果接收者在消息队列将其消息传递给它之后死亡,会发生什么?发送者如何知道接收者是否满足了它的预期请求?
作为起点,您需要阅读http://en.wikipedia.org/wiki/Two_Generals%27_Problem。
这是计算机科学中一个非常著名且非常常见的问题的一个例子。从技术上讲,它被认为是“已解决”,因为我们知道答案;但是,简短的故事是:您所要求的(严格来说)是不可能的。如果置信度<1.0,您可以设计一些协议,使您能够获得消息已经(或尚未)传递的任何程度的置信度。
在实践中,使用了两阶段和三阶段分布式事务协议的变体,以及各种重新传输和重新同步回退。具体取决于实施。
通常的选择是允许重复的可能性并要求接收方做出适当的响应。这是 TCP 做出的选择,如果您考虑一下,它就是试图为同一个问题找到一个合理的答案。