NServiceBus: quali sono i vantaggi di non utilizzare i tentativi?

0

So che è possibile configurare NServiceBus per riprovare automaticamente a inviare messaggi (FLR: tentativi di primo livello) e attendere prima di riprovare di nuovo (SLR: tentativi di secondo livello), ma, utilizzando la configurazione predefinita (5 FLR + 5 SLR) ' Prenderai circa un minuto prima di vedere un messaggio nell'errore < > coda.

Capisco il valore dei tentativi automatici, ma non è meglio fallire presto, configurando zero reflex zero pus zero e in realtà la codifica si aspetta che si verifichino degli errori?

Voglio dire, i tentativi automatici vanno contro il paradigma Fail-Fast , vero?

    
posta Machado 10.01.2017 - 20:50
fonte

2 risposte

2

I tentativi in NServiceBus sono pensati per essere un metodo per gestire problemi transitori come guasti di rete, riavvii, ecc. in tal caso il problema dovrebbe risolversi abbastanza rapidamente, e ci si aspetta comunque che messaggio da trattare il prima possibile. Se invece si dispone di un'eccezione a causa di un comando non valido per motivi aziendali, probabilmente si desidera rilevare l'eccezione e inviare un messaggio di risposta / pubblicare un evento, indicando che il comando non può essere eseguito perché violerebbe una regola aziendale .

L'idea generale è che le eccezioni dell'infrastruttura siano gestite dall'infrastruttura NServiceBus e che le eccezioni aziendali siano gestite dalla logica della tua azienda - in gestori di messaggi, saghe, modelli di dominio, ecc.

    
risposta data 15.02.2017 - 22:34
fonte
0

I guasti a cui si applicano i termini "fail-fast" sono quelli che è possibile rilevare e segnalare immediatamente. In un NServiceBus, si manifestano come eccezioni . Quando un'eccezione viene lanciata da un servizio, NServiceBus può essere configurato per riprovare immediatamente un certo numero di volte (cinque, per impostazione predefinita). Funziona se il problema non è persistente.

Se cinque tentativi non risolvono il problema, puoi tranquillamente supporre che un servizio dipendente abbia un problema (ad esempio un servizio JSON da cui dipende il tuo servizio è inattivo, o si è verificato un deadlock del database), è normale eseguire il backoff, aspetta un po 'ed effettua un nuovo tentativo. NServiceBus lo farà fino a cinque volte di default, con una quantità di ritardo crescente ogni volta.

In breve, "fail-fast" si applica solo quando si può effettivamente fallire velocemente. Non si applica in situazioni in cui si verifica un timeout o in cui possono verificarsi problemi al di fuori del proprio controllo.

Ulteriori letture
Opzioni di ripristino di NServiceBus

    
risposta data 10.01.2017 - 21:14
fonte

Leggi altre domande sui tag