代码之家  ›  专栏  ›  技术社区  ›  bit

基于AWS SQS的Lambda丢弃消息触发器

  •  -1
  • bit  · 技术社区  · 1 年前

    我有一个配置了死信队列的SQS队列。有2个Lambda由SQS队列事件触发。他们每个人都有不同的 filter 这使他们能够处理为他们准备的消息。过滤器如下所示:

    { "body" : { "ErpId" : [ "myErp1" ] } }
    

    { "body" : { "ErpId" : [ "someOtherErp" ] } } 
    

    当我向SQS队列发送6条消息时,其中3条具有ErpId myErpId 另外3个有ErpId 其他人 ,可以观察到的部分或全部消息 myErpId 被丢弃。

    我可以看到他们中的6人都进入了SQS队列,其中3人被Lambda接走 其他人 但是另一个Lambda只接收一些消息。在SQS队列或死信队列中找不到这些消息,在任一Lambdas的CloudWatch日志组中也看不到它们。

    你知道这里发生了什么吗?

    更新:两个Lambda都会丢弃一些消息(或者触发器会丢弃它们)

    0 回复  |  直到 1 年前
        1
  •  3
  •   Maurice    1 年前

    我去年遇到了这个问题 wrote a blog about it (是的,是的——我写的,相关的)。

    如果您有一个包含多个订阅者的队列,例如Lambda&EC2在Lambda有过滤器的情况下,您可能会丢失与过滤器不匹配的部分或全部消息,因为Lambda会丢弃不匹配的消息。

    Diagram explaining the filter behavior

    一个解决方法是使用一个SNS主题,每个Lambda附加一个队列来复制消息。