Rinvio dei messaggi in bus di servizio di Azure

Quando un client di coda o sottoscrizione riceve un messaggio che è disposto a elaborare, ma l'elaborazione non è attualmente possibile a causa di circostanze particolari, il client può rinviare il recupero del messaggio a un punto successivo. Il messaggio rimane nella coda o nella sottoscrizione, ma viene messo da parte.

Quando usare il rinvio dei messaggi

Il rinvio è una funzionalità creata in modo specifico per gli scenari di elaborazione del flusso di lavoro. I framework del flusso di lavoro potrebbero richiedere l'elaborazione di determinate operazioni in un ordine specifico. Potrebbero dover posticipare l'elaborazione di alcuni messaggi ricevuti finché non sia stato completato il lavoro preliminare prescritto, determinato da altri messaggi.

Un semplice esempio illustrativo è una sequenza di elaborazione degli ordini in cui una notifica di pagamento da un provider di pagamento esterno viene visualizzata in un sistema prima che l'ordine di acquisto corrispondente venga propagato dalla vetrina al sistema di evasione. In tal caso, il sistema di evasione potrebbe rinviare l'elaborazione della notifica di pagamento finché non è disponibile un ordine a cui associarla. Negli scenari di incontro, in cui i messaggi provenienti da origini diverse determinano un flusso di lavoro in avanti, l'ordine di esecuzione in tempo reale potrebbe essere corretto, ma i messaggi che riflettono i risultati potrebbero arrivare fuori ordine.

Il differimento consente di riordinare i messaggi dall'ordine di arrivo in un ordine in cui possono essere elaborati, lasciando tali messaggi in modo sicuro nell'archivio messaggi quando l'elaborazione deve essere posticipata.

Se non è possibile elaborare un messaggio perché una determinata risorsa per la gestione del messaggio è temporaneamente non disponibile, ma l'elaborazione dei messaggi non deve essere sospesa, è possibile riservare il messaggio per alcuni minuti. Ricordare il numero di sequenza in un messaggio pianificato da pubblicare in pochi minuti e recuperare nuovamente il messaggio posticipato all'arrivo del messaggio pianificato. Se un gestore di messaggi dipende da un database per tutte le operazioni e tale database è temporaneamente non disponibile, non usare il differitore. Sospendere invece completamente la ricezione dei messaggi fino a quando il database non sarà nuovamente disponibile.

Recuperare messaggi posticipati

I messaggi posticipati rimangono nella coda principale insieme a tutti gli altri messaggi attivi (a differenza dei messaggi non recapitabili che risiedono in una coda secondaria), ma non possono più essere ricevuti usando le normali operazioni di ricezione. È possibile individuare i messaggi posticipati tramite l'esplorazione o la visualizzazione di messaggi se un'applicazione perde traccia di tali messaggi.

Per recuperare un messaggio posticipato, il proprietario è responsabile della memorizzazione del numero di sequenza durante il rinvio del messaggio. Qualsiasi ricevitore che conosce il numero di sequenza di un messaggio posticipato può ricevere successivamente il messaggio usando metodi di ricezione che accettano il numero di sequenza come parametro. Per altre informazioni sui numeri di sequenza, vedere Sequenziazione dei messaggi e timestamp.

Annotazioni

I messaggi posticipati non scadono e vengono automaticamente spostati in una coda dei messaggi non recapitabili fino a quando un'app client non tenta di riceverli tramite un'API e il numero di sequenza. Questo comportamento è predefinito. Quando un client tenta di recuperare un messaggio differito, viene verificata la condizione di scadenza e il messaggio viene spostato in una coda dei messaggi non recapitabili se è già scaduto. Un messaggio scaduto viene spostato in una sottocoda dei messaggi non recapitabili solo quando la funzionalità dei messaggi non recapitabili è abilitata per l'entità (coda o sottoscrizione).

Comportamenti chiave dei messaggi posticipati

  • I messaggi posticipati rimangono nella coda principale, non in una coda secondaria.
  • Per recuperare un messaggio posticipato, è necessario utilizzare il numero di sequenza del messaggio.
  • I messaggi posticipati possono essere individuati tramite l'esplorazione dei messaggi (visualizzazione).
  • I messaggi posticipati non scadono fino a quando un client tenta di riceverli.
  • Il controllo di scadenza si verifica solo quando un client chiama un'API di ricezione con il numero di sequenza.

Passaggi successivi

Provare gli esempi nel linguaggio preferito per esplorare le funzionalità del bus di servizio di Azure.