Manipolazione correttamente timeout NServiceBus
-
03-10-2019 - |
Domanda
NServiceBus fornisce un meccanismo di timeout. Da nservicebus.com :
Il metodo RequestTimeout sulla base Classe dice NServiceBus per inviare un messaggio a un altro punto finale che sarà durevolmente tenere il tempo per noi ... C'è una processo che viene fornito con NServiceBus chiamato Timeout Gestore che fornisce un'implementazione di base di questa funzionalità.
Quando il tempo è scaduto, il Timeout manager invia un messaggio di nuovo alla saga causando il suo metodo Timeout essere chiamato con lo stesso oggetto state originariamente passato.
Come la vedo io c'è la possibilità che il timeout si attiva anche se il messaggio è stato consegnato al destinatario (la risposta ha ottenuto da qualche parte bloccato per esempio).
Come faccio a progettare la mia domanda in tal modo un che la mia applicazione si comporterà correttamente a prescindere se il messaggio ha fatto al destinatario oppure no.
Soluzione
Se il client invia un messaggio al server e quindi richiede un timeout, lo stato della richiesta verrà memorizzato. Se il messaggio Timeout viene ricevuto dal Cliente prima della risposta dal server quindi è possibile confrontare lo stato restituito dal Timeout allo stato attuale e vedere che il server non ha risposto e decidere cosa fare. Se la richiesta non è più valida, si potrebbe ignorare la risposta. Se questo è il caso, si consiglia di guardare l'attributo "TimeToBeReceived" per il messaggio Server. Sarà buttare via messaggi che non può ricevere in tempo designato.