如何处理基于队列的系统中的消费者故障?

时间:2012-07-22 22:54:25

标签: architecture message-queue batch-processing

我有一个相当概念性的问题,我希望不会被认为过于笼统或过于愚蠢:)

在数据项需要经历多个步骤的应用程序中(例如 - 步骤1 - 从CSV文件解析并生成报告,步骤2 - 然后根据上一步生成的报告运行报告等) ,假设使用持久队列实现处理,这样当发现新的原始文件时,会在队列中放置一条消息,要求处理该文件。处理该文件的消费者选择消息,并将另一条消息排队,将其工作结果排队等待下一步处理,等等。

我的问题是 - 在此过程中处理故障的最佳做法是什么?假设第1步的消费者完全失败了。

在基于队列的体系结构上实现这种批处理是否完全符合逻辑/效率?

1 个答案:

答案 0 :(得分:1)

是的,队列还可以,你还需要一个错误队列,你可以在有问题的文件和记录上放置消息

请注意,完全失败很容易,因为您可以稍后重新处理整个文件(如果这是一个临时问题)或忽略该文件(如果它有问题)。更严重的问题是部分失败,其中一些记录存在问题。

如果一步失败意味着必须以某种方式撤消其他步骤,您可能希望将其实现为saga。如果您希望更好地控制流程,可能需要考虑编排