使用Amazon SQS的系统架构



我正在建模一个系统(a),当系统(C)发生变化时,该系统会通知系统(B)。

所以我的系统(A)只是在系统(C)上使用API进行池化,当某个东西发生变化时,通知系统(B)。

系统(C)存储有关订单的状态。此状态可以是X、Y、Z。订单从状态X转换到Y可能需要几分钟到几小时。订单从Y转换到Z可能需要几天。

如果我只使用一个队列来建模我的系统,我想我会遇到一些问题。我可能会有一段时间,从状态Y->Z得到的消息比从状态X->Y得到的消息多得多,因为Y->Z的更新时间大于X->Y。所以处理X->Y需要很长时间。为了防止这种情况发生,我想我必须克隆消息并重新排队,将其放回队列的末尾。

我可以有两个队列,每个状态一个,而不是一个队列。

我简化了这个问题。在最初的问题中,我可以有多个状态。(我认为是5状态)。

你们有什么建议吗?

对于您的用例来说,将每个状态的队列分开是最好的选择,因为您不必担心或调整一个队列来处理这两种状态。

队列系统不是故障安全的。队列解析器必须能够处理应用程序崩溃。

  • 如果需要,请实现流程以确保队列不会被处理两次。(程序可能读取,但处理后未能消耗消息)

  • 实现一个失败的安全屋保存过程,如果队列服务器宕机并用它擦除所有消息,则重新发布工作。

  • 亚马逊SQS的最长消息保留期为14天。即使对于自己的MQ服务器,存储"长期"消息的风险也很高。

  • 无论您的X-->Y还是Y-->Z进程需要不同的处理时间,这都无关紧要。如果您在触发更改时尽快将消息发布到队列(例如Y-->Z更改发生在24天后),则不应该存在等待问题。IMHO,我看不出你有任何理由提出"重新入队"的问题。

最新更新