繁体   English   中英

为什么我的 AWS SQS 消息即使不符合筛选条件也会被删除?

[英]Why are my AWS SQS messages being deleted even though they don't match the filter criteria?

我使用带有 SQS 触发器的 AWS Lambda 函数来处理队列中的消息。

我在触发器上设置了一个过滤器模式,只允许处理正文中具有特定值的消息。 但是,我注意到一些不符合过滤条件的消息未经处理就从队列中删除。

这是我的触发器配置:

import type { AWS } from '@serverless/typescript'
import { handlerPath } from '@libs/handler-resolver'

import { QueueArn } from '@libs/sqs'

export default {
  handler: `${handlerPath(__dirname)}/handler.main`,
  events: [
    {
      sqs: {
        arn: QueueArn,
        enabled: true,
        batchSize: 10,
        maximumBatchingWindow: 1,
        functionResponseType: 'ReportBatchItemFailures',
        filterPatterns: [
          {
            body: {
              type: ['EMAIL'],
              action: [{ exists: true }],
              payload: [{ exists: true }]
            }
          }
        ]
      }
    }
  ]
} as AWS['functions'][keyof AWS['functions']]

我想将不符合过滤条件的消息保留在队列中,以便稍后处理或由不同的函数处理。

有没有办法将触发器配置为不删除这些消息?

我已尝试以下方法来解决此问题:

  • 检查 SQS 队列策略以确保它允许 Lambda 函数接收和删除消息
  • 检查 Lambda 函数执行角色以确保它具有访问 SQS 队列的必要权限
  • 已验证过滤器模式是否在触发器配置中正确设置。
  • 已验证 Lambda 函数是否正确处理和删除符合筛选条件的消息
  • 确认队列的可见性超时设置为足够的时间。
  • 测试了将具有不同正文属性的消息发送到队列,并确认过滤器模式对某些消息按预期工作。

但是,问题仍然存在,我不确定是什么原因造成的。 任何帮助或建议将不胜感激。

感谢@luk2302,感谢您建议使用 SNS 扇出到其他 SQS 队列。 我最终采用了这种方法,并且对我来说效果很好。

我没有在单个 SQS 队列上使用过滤器模式,而是为我的每个 AWS Lambda 创建了一个单独的 SQS 队列,并设置了从 SNS 主题到每个队列的订阅。 这样,我可以根据消息内容将消息路由到适当的 Lambda,而不是依赖过滤器模式来为我做这件事。

感谢您的帮助,我很高兴能够解决我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM