Domanda

Sql Service Broker utilizza la seguente euristica per determinare la presenza di messaggi in coda che impediscono l'applicazione dal fare qualsiasi lavoro utile:

"Service Broker fornisce il rilevamento automatico dei messaggi non elaborabili. Quando una transazione che contiene un indirizzo di ricezione dichiarazione rotola indietro di cinque volte, Service Broker disabilita tutte le code che l'operazione ha ricevuto messaggio, impostando automaticamente lo stato della coda su OFF." ( http://msdn.microsoft.com/en-us/library/ms166137. aspx )

Io 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 per cui 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 ognuno dei quali esegue proprio indipendenti ricevono dichiarazioni. Se questa applicazione muore per qualche ragione, questo fa sì che potenzialmente una transazione di rollback separato per ciascun thread di lavoro, che è abbastanza rollback per disabilitare 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 del tipo

ALTER QUEUE MyQueue SET RollbacksBeforePoison=20

E 'possibile una cosa del genere?

È stato utile?

Soluzione

No, il messaggio non elaborabile conteggio rilevamento rollback è difficile codificato a 5 e non si può cambiare. Ma quando una coda viene disattivata una notifica di evento viene generato nella coda per il BROKER_QUEUE_DISABLED evento. È possibile iscriversi a questo evento e hanno un gestore che sia avvisa un amministratore, o anche riattiva la coda posteriore. Anche l'applicazione potrebbe probabilmente sfruttare qualcosa come i mechanis attivazione esterni m per sintonizzare le dimensioni pool di thread al tasso di messaggi in arrivo.

Aggiornamento

A partire da SQL Server 2008 R2 è una nuova opzione per ALTER/CREATE QUEUE:

POISON_MESSAGE_HANDLING(STATUS = OFF/ON)
  

Specifica se un messaggio di veleno   movimentazione è attivato. Il valore predefinito è   ON.

     

Una coda che ha messaggi non elaborabili   movimentazione in OFF non sarà   disattivato dopo cinque consecutivi   rollback delle transazioni. Questo permette di   un sistema di segnalazione consegna veleno personalizzato   da definire con l'applicazione.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top