无服务器函数中的并发问题(AWS / Azure)

pdkcd3nj  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(102)

我的函数是处理来自队列服务的事件。
队列中的每个消息都将包含一个唯一的ID,并且希望具有相同ID的消息只处理一次。队列中可能会有多个相同的消息。
为了防止这种情况,我将函数逻辑定义为:

uniqueId = deserialize_queue_message();
if (check_in_progress(uniqueId))
  throw;
set_in_progress(uniqueId);
do_work();

字符串
函数缩放是我担心的:如果两个示例同时开始执行,它们都将通过check_in_progress(uniqueId)条件并继续执行do_work(),这将导致重复的消息处理。
对此,通常的做法是什么?我如何才能防止这个问题 * 同时 *?
我正在考虑在数据库级别添加一个唯一的约束,这样对(uniqueID,in_progress),所以在set_in_progress(uniqueId)步骤中抛出异常,但这迫使我在同一个数据库表中拥有uniqueID和in_progress,如果可能的话,我想避免这种情况。

5kgi1eie

5kgi1eie1#

如果您可以接受5分钟的ID重复数据消除窗口,则可以尝试使用SQS FIFO,它可保证仅一次交付,并具有重复数据消除逻辑(重复数据消除间隔为5分钟)

相关问题