Interruzione e avvio delle applicazioni di Service Broker
In alcuni casi può essere necessario interrompere temporaneamente un'applicazione di Service Broker, ad esempio un'applicazione occupata, per installare una versione aggiornata della stored procedure di attivazione per la coda. La coda può essere modificata anche senza interrompere l'applicazione ma le copie della stored procedure di attivazione in esecuzione potrebbero non esaurire mai i messaggi da elaborare e quindi non terminare mai. In questo caso l'interruzione della coda causa la chiusura immediata delle stored procedure in esecuzione. Quando si avvia di nuovo il servizio, Service Broker avvia la stored procedure di attivazione aggiornata.
Le informazioni in questa sezione si applicano all'interruzione temporanea di un'applicazione per motivi di manutenzione. Per informazioni sulla rimozione permanente di un servizio dal database, vedere Disinstallazione di applicazioni di Service Broker.
Per interrompere temporaneamente un servizio, modificare la coda utilizzata dall'applicazione impostando lo stato della coda su OFF. Dopo questa operazione, la coda non è disponibile per le operazioni di ricezione e l'applicazione viene interrotta. Service Broker non recapita nuovi messaggi alla coda e non consente all'applicazione di ricevere messaggi dalla coda. Quando un'applicazione tenta di ricevere un messaggio da una coda non disponibile, riceve un errore Transact-SQL. L'applicazione può chiamare END CONVERSATION per una conversazione in qualsiasi momento, indipendentemente dalla disponibilità della coda utilizzata per la conversazione. Service Broker tuttavia non recapita il messaggio di fine dialogo al servizio remoto finché la coda non è disponibile.
Quando arriva un messaggio per una coda interrotta, Service Broker mantiene il messaggio nella coda di trasmissione per il database finché la coda di destinazione non è disponibile. Un messaggio in arrivo per una coda interrotta non viene considerato un errore e non viene generata una notifica per il mittente. Quando la coda è disponibile, Service Broker inoltra i messaggi presenti nella coda di trasmissione alla coda del servizio. Per questa operazione di recapito viene utilizzata la normale logica di riesecuzione dei tentativi per i messaggi. I messaggi vengono contrassegnati come posticipati nella coda di trasmissione e periodicamente viene ripetuto un tentativo di invio. I messaggi vengono mantenuti nella coda di trasmissione e posticipati indipendentemente dal fatto che abbiano origine dalla stessa istanza della coda o che provengano dalla rete.
L'interruzione di una coda non reimposta il timer di conversazione o di durata del dialogo per i messaggi nella coda. Se durante l'interruzione della coda uno dei timer scade, al riavvio della coda Service Broker genera i messaggi appropriati.
Per riavviare l'applicazione, modificare la coda utilizzata dall'applicazione impostando lo stato della coda su ON. La coda viene avviata automaticamente. Se per la coda è specificata una stored procedure di attivazione e nella coda sono presenti messaggi, all'avvio della coda Service Broker avvia immediatamente la stored procedure di attivazione. Poiché la coda è disponibile, Service Broker genera i messaggi per i timer di conversazione e di durata del dialogo scaduti durante l'interruzione della coda. Se non viene utilizzata una stored procedure di attivazione, riavviare l'applicazione utilizzando la relativa procedura di avvio.
Vedere anche