2009-09-02 20 views
6

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?

risposta

11

No, il conteggio del rollback del rilevamento di messaggi non codificati è codificato a 5 e non è possibile modificarlo. Tuttavia, quando una coda è disabilitata, viene generata una notifica di evento sulla coda per l'evento BROKER_QUEUE_DISABLED. È possibile iscriversi a questo evento e disporre di un gestore che notifica un amministratore o riabilita nuovamente la coda. Anche l'applicazione potrebbe probabilmente sfruttare qualcosa come the external activation mechanis m per adattare le dimensioni del pool di thread alla velocità dei messaggi in arrivo.

Aggiornato

Come di SQL Server 2008 R2 è una nuova opzione per ALTER/CREATE QUEUE:

POISON_MESSAGE_HANDLING(STATUS = OFF/ON) 

Specifica se un messaggio veleno gestione è abilitata. L'impostazione predefinita è ON.

Una coda che ha messaggi non elaborabili manipolazione impostato su OFF non sarà disattivato dopo cinque consecutivi rollback delle transazioni. Ciò consente a di personalizzare il sistema di consegna dei messaggi avvelenati da parte dell'applicazione.

Problemi correlati