Servicios web de Amazon: ¿hay alguna forma de agregar un temporizador entre mensajes en AWS SQS?

CorePress2024-01-24  10

Estoy desarrollando un cliente de correo electrónico que utiliza el servidor SMTP de mis clientes. Almaceno las credenciales en una base de datos AWS RDS. Los clientes pueden crear campañas de correo electrónico y los correos electrónicos deben enviarse de forma asincrónica después de la creación de la campaña.

Quiero configurar una cola SQS para que los mensajes estén disponibles con un retraso de 2 minutos entre cada mensaje. El propósito es enviar el mensaje a una función Lambda capaz de enviar el mensaje a través de SMTP (usando las credenciales en la base de datos). Gracias a este retraso entre mensajes, puedo optimizar la entrega de los correos electrónicos. El orden de entrega no es realmente importante.

Desafortunadamente, no encuentro una manera de hacerlo. Los temporizadores disponibles en SQS son para toda la cola o deben ser específicos para cada mensaje. En mi caso,Si pongo 100 mensajes en la cola SQS, necesito que el primero se envíe inmediatamente, el segundo 2 minutos después y así sucesivamente.

¿Alguien tiene soluciones para este problema? Si SQS no es el servicio adecuado para gestionar esta necesidad, ¿hay otro disponible en la plataforma AWS?

Lambda + SQS admite el procesamiento por lotes: aws.amazon.com/about-aws/whats-new/2020/11/…

-luk2302

27/03/2021 a las 15:00

No quiero procesamiento por lotes. Por el contrario, quiero extraer un mensaje cada 2 minutos del SQS

- Theo Martínez

27/03/2021 a las 15:57

1

Puede programar un activador a través de Cloudwatch que básicamente activa una lambda que luego recibe manualmente un único mensaje de SQS. Aparte de eso (y de implementar su propia aplicación y escribir toda la lógica usted mismo), realmente no tiene unaQuedan y opciones.

-luk2302

27/03/2021 a las 16:35

Amazon SQS no retrasará los mensajes. Debes incorporar este retraso en tu código de consumidor (para que solo consuma registros en un intervalo de tiempo determinado).

- John Rotenstein

28 de marzo de 2021 a las 2:47



------------------------------------

Probablemente podamos lograr esta combinación de configuración de mapeo de fuente de eventos lambda para sqs yd configuración de simultaneidad reservada lambda.

Asignación de origen del evento Tamaño del lote: 1

Esto permitirá enviar solo 1 mensaje a Lambda a la vez.

Ventana de lote de asignación de origen del evento: 2 minutos

Esto permitirá que lambda se invoque solo una vez cada 2 minutos.

Simultaneidad reservada de Lambda como 1

Esto permitirá que solo se llame a un subproceso lambda a la vez.

4

Aparentemente, la ventana por lotes de asignación de origen de eventos no se puede configurar de esta manera. Sólo podemos configurar el MaximumBatchingWindowInSeconds pero eso no ayuda aquí.

- Theo Martínez

28/03/2021 a las 11:34

MaximumBatchingWindowInSeconds puede durar hasta 5 minutos, ¿verdad? Si configuramos 2 minutos, lambda no funcionará. ¿Se puede invocar más de una vez en 2 minutos?

- Balu Vyamajala

28/03/2021 a las 13:19

No, es más como: si elige un tamaño de lote de 10 y 2 minutos para la ventana de lote máxima, LambdaEspero 10 mensajes o 2 minutos. Si solo hay 8 mensajes durante 2 minutos, Lambda inicia la función.

- Theo Martínez

29 de marzo de 2021 a las 7:40

@TheoMartinez Gracias. Por alguna razón pensé que era un y. Lo probaré también más tarde hoy.

- Balu Vyamajala

29/03/2021 a las 14:26



------------------------------------

Gracias @luk2302 por su respuesta, es la buena según el equipo de soporte de AWS. Usandoel servicio EventBridge para activar la lambda en el momento definido funciona perfectamente.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare