2011-12-08 18 views
11

En Amazon Web Services, sus colas le permiten publicar mensajes con un retraso de visibilidad de hasta 15 minutos. ¿Qué pasa si no quiero que los mensajes estén visibles durante 6 meses?¿Existe una forma elegante de publicar mensajes en AWS SQS con un retraso de visibilidad de más de 15 minutos?

Estoy tratando de encontrar una solución elegante para el problema de votación/envío. Puedo escribir código para sondear el SQS (o una base de datos) cada pocos segundos, buscar mensajes que estén listos para ser visibles, luego moverlos a una "cola visible", o algo así. Ojalá hubiera un método más simple y confiable para hacer que los mensajes se vuelvan visibles en las colas en el futuro sin tener que preocuparme de que mi aplicación de sondeo funcione perfectamente todo el tiempo.

No estoy casado con AWS, SQS ni nada de eso, pero preferiría encontrar una solución amigable con la nube que sea estable, confiable y desencadene un evento muy lejano en el futuro sin tener que preocuparme por revisando su estado todos los días.

Cualquier idea o árbol alternativo para explorar ladrando es bienvenido.

Gracias!

Respuesta

8

Parece que es posible que esté malinterpretando el retraso de visibilidad. Su propósito es asegurarse de que la aplicación de sondeo no extraiga el mismo elemento de la cola más de una vez.

En otras palabras, cuando el artículo se saca de la cola se vuelve invisible durante un período de tiempo predeterminado (el predeterminado es 30 segundos, máximo 15 minutos) en caso de que el sistema de sondeo tenga un grupo de máquinas leyendo desde la cola de repente.

Aquí está la documentación pertinente:

http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#AboutVT

... y la frase en particular que se relaciona con mi comentario es:

"Inmediatamente después de que el componente recibe el mensaje, el mensaje sigue siendo Sin embargo, no desea que otros componentes del sistema reciban y procesen el mensaje nuevamente. Por lo tanto, Amazon SQS los bloquea con un tiempo de espera de visibilidad, que es un período de tiempo durante el cual Amazon SQS impide que otros componentes consumidores reciban y procesando ese mensaje ".

Debe poder utilizar SQS para su propósito, ya que puede dejar un elemento en la cola el tiempo que desee.

+2

Hola Jay- Lo siento, no fui más claro con mi pregunta. No me estoy refiriendo a la visibilidad del mensaje, sino a las colas de retardo, donde los mensajes no son visibles para nadie durante un período de tiempo (y no porque otros procesos los hayan extraído). Esto evita que los mensajes sean procesados ​​en absoluto por un período de tiempo determinado por el usuario. Aquí hay un enlace: http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#sqs-delay-queues –

+2

Es posible que desee consultar http://www.iron.io, han tengo un par de nuevos productos que se ven bastante bien para lo que estás tratando de hacer. –

3

7 años después, ¡y Amazon todavía no es compatible con la función que necesita!

Las dos formas se puede ordenar de conseguir que funcione son:

  • han mensajes contener una fecha y hora de destino de entrega en sus message_attributes, y tienen los trabajadores que consumen los mensajes de la cola simplemente borrar y volver a crear cualquier mensaje que se consume antes de su objetivo, con delay = max (0, min (secs_until_target_datetime, 900)); eso le permitiría programar efectivamente un mensaje para cualquier hora futura arbitraria;

o,

  • (un poco menos frecuente y constly :) Del mismo modo, si un mensaje no se debe a ser manejado sin embargo, volver a crear y cambiar su tiempo de espera de visibilidad a ser el tiempo de espera = max (0 , min (segs_until_target_datetime, 43200))

La desventaja de utilizar el tiempo de espera de visibilidad es que cualquier lectura lo volverá a activar.

Cuestiones relacionadas