2011-05-26 12 views

risposta

8

Le code di Azure non garantiscono l'ordine dei messaggi e l'univocità dei messaggi. I messaggi verranno elaborati "almeno una volta", ma nulla garantisce che non verrà elaborato due volte, quindi non garantisce "al massimo una volta".

Dovresti essere pronto a ricevere lo stesso messaggio due volte. Puoi inserire un ID nel corpo del messaggio come parte dei tuoi dati.

11

vtortola praticamente lo copriva, ma volevo aggiungere un po 'più di dettaglio al motivo per cui è almeno una volta consegna.

Quando si legge un articolo in coda, non viene rimosso dalla coda; invece, diventa invisibile ma rimane in coda. Il periodo di invisibilità è impostato su 30 secondi (max: 2 ore). Durante questo periodo, il codice che ha eliminato l'elemento dalla coda ha tutto il tempo necessario per elaborare qualsiasi comando presente nel messaggio di coda ed eliminare l'elemento della coda.

Supponendo che l'elemento della coda venga eliminato prima del raggiungimento del periodo di timeout, tutto va bene. Tuttavia: una volta raggiunto il periodo di timeout, l'elemento della coda diventa nuovamente visibile e il codice che contiene l'elemento della coda potrebbe non eliminarlo più. In questo caso, qualcun altro può leggere lo stesso messaggio in coda e rielaborare quel messaggio.

A causa del fatto un messaggio coda può timeout, e può ri-compaiono:

  • trattamento dei suoi coda deve essere idempotent - operazioni su un messaggio di coda deve comportare lo stesso risultato (come ad esempio il rendering una miniatura per una foto).
  • È necessario pensare alle modifiche del timeout. Potresti scoprire che i comandi sono validi ma l'elaborazione impiega troppo tempo (forse il codice di rendering delle miniature di 45 secondi ha funzionato bene fino a quando qualcuno ha caricato un'immagine da 25MP)
  • È necessario pensare ai messaggi velenosi, quelli che non verranno mai elaborati correttamente. Forse provocano l'emissione di un'eccezione o una condizione non valida che provoca l'interruzione dell'elaborazione da parte del processore di messaggi, che a sua volta riappare nel messaggio. C'è una proprietà denominata DequeueCount - considera di visualizzare tale proprietà alla lettura di un elemento della coda e, se uguale a, ad esempio 3, invia il messaggio in una tabella o in un blob e invia una notifica per dedicare del tempo al debug di quel messaggio offline.

Ulteriori dettagli sull'API REST di basso livello get-queue sono here. Questo ti darà più informazioni sulla gestione dei messaggi della coda di Windows Azure.

Problemi correlati