Abbiamo MSMQ in cluster per un set di servizi NServiceBus e tutto funziona alla perfezione finché non lo è. Le code in uscita su un server iniziano a riempirsi e molto presto l'intero sistema è bloccato.I messaggi MSMQ associati all'istanza MSMQ cluster si bloccano nelle code in uscita
Maggiori dettagli:
Abbiamo un MSMQ cluster tra i server N1 e N2. Altre risorse in cluster sono solo servizi che operano direttamente sulle code in cluster come distributori locali, cioè NServiceBus.
Tutti i processi di lavoro vivono su server separati, Services3 e Services4.
Per coloro che non hanno familiarità con NServiceBus, il lavoro viene inserito in una coda di lavoro in cluster gestita dal distributore. Le app Worker su Service3 e Services4 inviano messaggi "I'm Ready for Work" a una coda di controllo cluster gestita dallo stesso distributore e il distributore risponde inviando un'unità di lavoro alla coda di input del processo worker.
A un certo punto, questo processo può essere completamente bloccato. Ecco una foto delle code in uscita nell'istanza MSMQ cluster quando il sistema è bloccato:
Se fallisco sopra il cluster all'altro nodo, è come tutto il sistema ottiene un calcio nel sedere . Ecco una foto della stessa istanza cluster MSMQ poco dopo un failover:
qualcuno può spiegare questo comportamento, e che cosa posso fare per evitarlo, per mantenere il sistema in esecuzione senza problemi?
Alla fine il nodo secondario si blocca? Come agiscono i lavoratori? Elaborano attivamente i messaggi? –
Non succede abbastanza spesso da poter affermare autorevolmente che ciò avvenga su un solo nodo o entrambi. I lavoratori si stanno comportando - stanno elaborando attivamente i messaggi quando ci sono messaggi nelle code di input locali da elaborare. –
Strano. Quanto spesso succede? Quante schede NIC ha ciascun nodo? Mi chiedo se MSMQ si stia confondendo su quale scheda usare e quindi occasionalmente non stia completando gli ACK. Ci dovrebbe essere un'impostazione di registro per bloccarlo. –