SQL Service Broker utilizza la seguente euristica per determinare la presenza di messaggi in coda che impediscono l'applicazione dal fare qualsiasi lavoro utile:.Rendere il Service Broker meno aggressivo sul rilevamento dei messaggi velenosi?
"Service Broker fornisce il rilevamento messaggio automatico veleno Quando una transazione che contiene un RICEVERE dichiarazione ripristina cinque volte, Service Broker disabilita tutte le code da cui la transazione ha ricevuto i messaggi, impostando automaticamente lo stato della coda su OFF. " (http://msdn.microsoft.com/en-us/library/ms166137.aspx)
Sto bene con questo approccio di base, ma c'è un modo per cambiare il # di tentativi da cinque a qualcosa di più alto, forse venti?
Il motivo che questo sarebbe utile per me è che il codice Attualmente sto usando per elaborare la coda è un app al di fuori di SQL Server che ha circa 10 thread di lavoro, ognuno dei quali ha uno SqlConnection indipendente e ciascuna delle quali esegue le proprie dichiarazioni RECEIVE indipendenti. Se questa applicazione muore per qualche motivo, questo potenzialmente causa una transazione di rollback separata per ogni thread di lavoro, che è sufficiente per ripristinare la coda. Al contrario, mi piacerebbe essere in grado di uccidere la mia applicazione senza disabilitare la coda. Probabilmente dovrei riscrivere l'applicazione per utilizzare un unico SqlConnection, ma sarebbe molto più facile se solo potessi dire qualcosa di simile
ALTER QUEUE MyQueue SET RollbacksBeforePoison=20
è qualcosa di simile possibile?