2011-12-08 5 views
11

In Amazon Web Services, le loro code consentono di pubblicare messaggi con un ritardo di visibilità fino a 15 minuti. Cosa succede se non desidero visualizzare i messaggi per 6 mesi?C'è un modo elegante per inviare messaggi ad AWS SQS con un ritardo di visibilità superiore a 15 minuti?

Sto cercando di trovare una soluzione elegante al problema sondaggio/push. Posso scrivere codice per interrogare SQS (o un database) ogni pochi secondi, controllare i messaggi che sono pronti per essere visibili, quindi spostarli in una "coda visibile", o qualcosa del genere. Vorrei che esistesse un metodo più semplice e più affidabile per far sì che i messaggi diventassero visibili nelle code nel lontano futuro senza che mi dovessi preoccupare del fatto che la mia applicazione di polling funzionasse perfettamente tutto il tempo.

Non sono sposato con AWS, SQS o altro, ma preferirei trovare una soluzione cloud-friendly stabile, affidabile e che innescherà un evento lontano nel futuro senza che io debba preoccuparmi di controllando il suo stato ogni giorno.

Tutti i pensieri o alberi alternativi da esplorare per scortecciare sono benvenuti.

Grazie!

risposta

8

Sembra che si possa fraintendere il ritardo di visibilità. Il suo scopo è quello di assicurarsi che l'applicazione di polling non estrae lo stesso oggetto dalla coda più di una volta.

In altre parole, quando l'elemento viene estratto dalla coda diventa invisibile per un periodo di tempo predeterminato (il valore predefinito è 30 secondi, il valore massimo è 15 minuti) nel caso in cui il sistema di polling abbia un cluster di macchine che leggono dalla coda tutto in una volta.

Ecco la relativa documentazione:

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

... e la frase, in particolare, che si riferisce al mio commento è:

"Immediatamente dopo che il componente riceve il messaggio, il messaggio è ancora In coda, tuttavia, non si desidera che altri componenti nel sistema ricevano ed elaborino nuovamente il messaggio. Pertanto, Amazon SQS li blocca con un timeout di visibilità, ovvero un periodo di tempo durante il quale Amazon SQS impedisce ad altri componenti di consumo di ricevere ed elaborando quel messaggio. "

Dovresti essere in grado di utilizzare SQS per il tuo scopo poiché puoi lasciare un elemento in coda per tutto il tempo che desideri.

+2

Hey Jay- Scusa per non essere stato più chiaro con la mia domanda. Non mi riferisco alla visibilità dei messaggi, ma alle code di ritardo, in cui i messaggi non sono visibili a nessuno per un periodo di tempo (e non perché sono stati ritirati da qualche altro processo). Ciò impedisce che i messaggi vengano elaborati del tutto per un determinato periodo di tempo definito dall'utente. Ecco un link: http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/IntroductionArticle.html#sqs-delay-queues –

+2

Si consiglia di dare un'occhiata a http://www.iron.io, hanno ho un paio di nuovi prodotti che sembrano abbastanza buoni per quello che stai cercando di fare. –

3

7 anni più tardi, e Amazon non supporta ancora la funzione che ti serve!

I due modi in cui è possibile ordinare di farlo funzionare sono:

  • sono messaggi contengono un data-ora obiettivo di consegna nei loro message_attributes, e hanno i lavoratori che consumano i messaggi della coda basta cancellare e ricreare qualsiasi messaggio che viene consumato prima del suo obiettivo, con delay = max (0, min (secs_until_target_datetime, 900)); ciò ti consentirebbe di programmare efficacemente un messaggio per qualsiasi tempo futuro arbitrario;

o,

  • (un po 'meno frequenti e constly :) Allo stesso modo, se un messaggio non dovrebbe essere ancora gestita, ricrearlo e cambiare il suo timeout visibilità essere timeout = max (0 , min (secs_until_target_datetime, 43200))

Lo svantaggio dell'utilizzo del timeout di visibilità è che qualsiasi lettura la riattiva.

Problemi correlati