Tengo una función Lambda, que enviará una notificación SNS cuando se envíe un mensaje a SQS Queue. Pero observo que Lambda eliminará el mensaje de la cola una vez que lo haya procesado y se haya mencionado aquí .
¿Hay alguna manera de hacer que la lambda falle, sin lanzar una nueva excepción en Java?
Según su descripción, parece que debería considerar usar un escenario de despliegue para su caso de uso:
El escenario de "distribución ramificada" es cuando un mensaje de Amazon SNS se envía a un tema y luego se replica y se envía a varias colas de Amazon SQS , puntos de enlace HTTP o direcciones de correo electrónico.
En este escenario, su SNS publicaría un mensaje en dos colas de SQS . Posteriormente, cada equipo tendría sus propios mensajes para trabajar, y no necesitaría terminar su lambda a la fuerza para mantener un mensaje procesado en una sola cola.
De forma predeterminada, la integración de SQS a Lambda significa que los mensajes en la cola se volverán invisibles una vez que la función comience a procesarlos y se eliminarán de la cola una vez que la función se haya completado.
Si la función falla (salida incorrecta), el mensaje volverá a ser 'visible' y será procesado una vez más por una nueva invocación lambda. Esto continuará hasta que esté configurado en su política de re-drive.
En cualquier caso, después de aproximadamente 4 días, los mensajes comenzarán a eliminarse de la cola, la cola de SQS no es un lugar de almacenamiento permanente. No puede utilizar SQS como almacenamiento permanente.
Una respuesta corta a su pregunta es fallar la invocación al salir con un estado distinto de cero, pero tenga cuidado, el mensaje será reprocesado, a menos que tenga una política de redireccionamiento que lo empuje a la DLQ.