Gestione degli errori nella cache
Ci sono scenari in cui NCache le operazioni del client potrebbero non riuscire a causa di vari errori, come dimostrato di seguito.
La chiave specificata esiste nella cache
- Tipo di eccezione:
OperationFailedException
Messaggio: "La chiave specificata esiste già nella cache."
Motivo: Questa eccezione è specifica per il Aggiungi API se la stessa chiave viene utilizzata con l'oggetto. L'operazione aggiunge un elemento alla cache solo se la chiave data non esiste in precedenza. Aggiunge i dati alla cache per la prima volta quando la chiave non esiste all'interno della cache.
Puoi gestire questa operazione nei seguenti modi in base ai requisiti aziendali:
- Specifica una nuova chiave per l'oggetto che stai tentando di aggiungere.
- Usa il inserire API se la stessa chiave viene utilizzata con l'oggetto.
- Usa il Rimuovere API se la stessa chiave viene utilizzata con l'oggetto. Rimuovi prima l'oggetto e poi aggiungilo di nuovo alla cache con la stessa chiave.
Connessione fallita
- Tipo di eccezione:
OperationFailedException
Messaggio: "L'operazione è stata interrotta a causa di una perdita di connettività tra il server e il client."
Motivo: Le operazioni possono fallire nel caso in cui si perda una connessione tra il server e il client. Ciò potrebbe essere dovuto a un problema tecnico della rete oa un'interruzione fisica tra il client e il server.
Potresti riscontrare questa eccezione se una connessione già stabilita viene interrotta con il server. In tal caso, si consiglia di risolvere prima la causa della rete e quindi riprovare l'operazione se è altamente necessaria.
Nessun server disponibile per elaborare la richiesta
- Tipo di eccezione:
OperationFailedException
Messaggio: "Nessun server è disponibile per elaborare la richiesta".
Motivo: Potresti riscontrare questa eccezione se la cache non è disponibile a causa di interruzione e inaccessibilità.
Timeout operazione
- Tipo di eccezione:
OperationFailedException
Messaggio: "Operazione scaduta."
Motivo: In caso di transazioni pesanti sul server, le operazioni client in entrata possono essere messe in coda mentre il server elabora le operazioni correnti. A ogni operazione del client cache è associato un valore di timeout configurabile. Ciò significa che se il server cache non risponde all'operazione entro il tempo stabilito, l'operazione verrà considerata fallita anche se non è realmente fallita - o riuscita - del resto.
Non è consigliabile riprovare immediatamente un'operazione scaduta poiché potrebbe comunque verificarsi nuovamente un timeout se il server sta ancora elaborando le operazioni precedenti. Pertanto, è consigliabile se la tua attività lo consente, si estende il valore di timeout prima di riprovare l'operazione.
In NCache, il valore di timeout predefinito è 90 secondi durante i quali deve essere completata un'operazione client. Nel caso in cui si desideri che l'operazione attenda più a lungo, è possibile configurare il file client-request-timeout
valore dal client.ncconf file.
Operazione eseguita durante il trasferimento di stato
- Tipo di eccezione:
OperationFailedException
Messaggio: "Impossibile completare l'operazione a causa del trasferimento statale."
Motivo: Una volta modificato lo stato di distribuzione del cluster, è necessaria un'immediata coerenza dei dati in tutto il cluster, in particolare per le topologie partizionate e di replica delle partizioni. Questo cambiamento di stato si verifica a causa dell'adesione o dell'uscita dei nodi dal cluster. Ciò significa che una volta che un nodo si unisce al cluster, al nodo appena aggiunto devono essere forniti i dati della cache in base alla distribuzione. Allo stesso modo, se un nodo lascia il cluster, i dati vengono ridistribuiti tra i nodi rimanenti.
Per far fronte a questo problema, NCache avvia internamente un trasferimento di stato, un meccanismo di trasferimento dati a livello di nodo, che viene attivato dopo che la distribuzione dei dati è stata modificata in una cache in cluster.
Un trasferimento di stato può avvenire tra due nodi di un singolo cluster, dove i dati vengono trasferiti bucket per bucket. Il nodo richiedente avvia il trasferimento di stato bloccando quel bucket specifico. Tutte le operazioni eseguite su questo bucket durante il trasferimento di stato vengono registrate. Queste operazioni possono produrre risultati duplicati o inferiori a quelli previsti, poiché durante il trasferimento potrebbe esistere lo stesso bucket su entrambi i nodi oppure nessuno. Una volta trasferito completamente un bucket, le operazioni registrate vengono trasferite al nodo richiedente.
Si consiglia di monitorare i contatori State Transfer PerfMon per la cache dopo ogni modifica nel cluster. Una volta che i contatori indicano che il trasferimento dello stato è completo, puoi procedere con l'esecuzione delle operazioni sulla cache.
Vedere anche
Come connettersi alla cache
Aggiungi dati alla cache
Recupera i dati della cache esistenti
Rimuovere i dati dalla cache
Crea cache