有什么方法可以在特定条件下从 AWS lambda 函数内部将事件消息显式发送到死信队列?

Is there any way to explicitly send event message to dead letter queue from inside AWS lambda function on certain condition?

我正在尝试通过调用 AWS lambda 函数将 s3event 消息发送到 rabbitmq。我已将 SQS 配置为我的死信队列 (DLQ)。 我知道当 lambda 调用失败或超时或资源限制等情况时,消息会发送到 DLQ。 我的问题是,我想在某些情况下从 lambda 函数内部向 DLQ 发送事件消息,例如 rabbitmq 关闭或我感兴趣的其他一些情况。 有同样的可能性吗?我应该抛出异常还是有其他更好的方法将事件消息发送到 DLQ。

我正在使用 java 进行开发并从我的 lambda 函数连接到 rabbitmq。

在 Lambda 的 DLQ 设置中,您指定 SNS 主题或 SQS 队列。在您的设置中,您已将 DLQ 配置为 SQS 队列。这是一个常规的 SQS 队列。使用 SQS Java SDK,您可以 post 向该 SQS 队列发送消息。

这里有一些参考资料: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-send-message.html

要获取队列 URL,您可以使用这些: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html

或通过Java: https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQSClient.html#getQueueUrl-java.lang.String-

DLQ 只是一个 SQS 队列,因此您可以 send a message 它就像对待任何其他队列一样。您可能希望它的格式与 Lambda 本地将消息放入 DLQ 的方式相同,以便您对 DLQ 进行的任何处理都可以对所有消息执行相同的方式。不过,您需要确保将 lambda 视为在此实例中成功执行,以便正常的 DLQ 进程不会两次接收相同的消息。