Garanzie di recapito dei messaggi

Per impostazione predefinita, le garanzie di recapito dei messaggi in Orleans prevedono che un messaggio venga recapitato al massimo una volta (semantica at-most-once). Facoltativamente, se configurato per eseguire nuovi tentativi al timeout, Orleans garantisce che un messaggio venga recapitato almeno una volta (semantica at-least-once).

Maggiori dettagli:

  • Ogni messaggio in Orleans ha un timeout automatico ed è possibile configurare il timeout esatto. Se la risposta non arriva in tempo, l'oggetto Task restituito viene interrotto con un'eccezione di timeout.
  • È possibile configurare Orleans in modo da eseguire nuovi tentativi automatici al timeout, poiché questi non vengono eseguiti per impostazione predefinita.
  • Ovviamente, anche il codice dell'applicazione può scegliere di eseguire nuovi tentativi al timeout.

Se il sistema Orleans è configurato in modo da non eseguire nuovi tentativi automatici (impostazione predefinita) e l'applicazione non ripete l'invio, Orleans fornisce un recapito dei messaggi di tipo at-most-once. Un messaggio verrà recapitato una sola volta o non verrà recapitato affatto. Il recapito non avverrà mai due volte.

Nel sistema con ripetizione dei tentativi (da parte del runtime o dell'applicazione), il messaggio potrebbe arrivare più volte. Orleans attualmente non esegue alcuna operazione per archiviare in modo permanente i messaggi già arrivati e eliminare il secondo recapito. Questa operazione sarebbe piuttosto costosa. Pertanto, in un sistema con ripetizione di tentativi, Orleans NON garantisce che un messaggio venga recapitato al massimo una volta.

Se si ripetono i tentativi all'infinito, alla fine il messaggio arriverà, garantendo così almeno un recapito. Si noti che "la sicurezza che alla fine il messaggio arrivi" deve essere garantita dal runtime. Non avviene gratuitamente da sola, anche se si continua a riprovare. Orleans fornisce comunque un recapito perché i grani non passano mai a uno stato di errore permanente e alla fine un grano in errore verrà riattivato su un altro silo.

In sintesi: nel sistema senza ripetizione di tentativi, Orleans garantisce un recapito dei messaggi di tipo at-most-once. Nel sistema con ripetizione di tentativi all'infinito, Orleans garantisce un recapito di tipo at-least-once (e non garantisce un recapito di tipo at-most-once).

Importante

Nella relazione tecnica su Orleans è stata accidentalmente menzionata solo la seconda opzione con ripetizione automatica dei tentativi. Non si è parlato del fatto che per impostazione predefinita, senza ripetizione di tentativi, Orleans fornisce un recapito di tipo at-most-once.