我有一个关于在分布式系统环境中共享数据的问题。 通常我正在使用方案A,即。我正在将消息从系统A推送到远程队列(例如Amazon SNS / SQS),并且我希望系统B在系统B启动并运行时能够接收消息。
我已经考虑过了,但我想出了一个替代方案,我不确定它是否足够好。基本上,系统A现在将消息推送到本地队列,而本地队列将消息推送到系统A。其前提是系统A和B都已启动并且正在运行,并且该队列仅针对系统A。没有系统C,D,E ...会将消息推送到C,D,E上某个地方的相同(重复)本地队列。
这是一个很好的选择吗?
当远程队列不可用并且我不想丢失消息时,我还考虑将方案B作为方案A的备份计划。在那种情况下,系统B将是一个远程队列。
答案 0 :(得分:1)
方案C实际上是分布式消息传递应采用的方式,并且实际上已经完成。在异步通信中,这称为发件箱模式。有一些模式可用于弹性地发布到事件总线。它非常类似于邮箱,您的邮箱会将您的电子邮件保留在发件箱中,直到送达为止。调整的一点是,使用持久性存储来代替本地队列。
但是您需要有一个工作人员来寻找未决消息,并在队列可用时立即发布它们。
您可以在此处找到有关此模式的更多信息。