Service Broker

Si applica a:SQL ServerIstanza gestita di SQL di Azure

SQL Server Service Broker offre supporto nativo per la messaggistica e l'accodamento nel motore di database di SQL Server e in Istanza gestita di SQL di Azure. Gli sviluppatori possono creare facilmente applicazioni complesse che usano i componenti del motore di database per la comunicazione tra vari database, nonché compilare applicazioni distribuite e affidabili.

Quando usare Service Broker

Usare i componenti di Service Broker per implementare funzionalità di elaborazione di messaggi asincroni nel database native. Gli sviluppatori di applicazioni che utilizzano Service Broker possono distribuire il carico di lavoro su più database senza programmare interni di comunicazione e messaggistica complessi. Service Broker riduce le attività di sviluppo e test perché gestisce i percorsi di comunicazione nel contesto di una conversazione, con conseguente miglioramento delle prestazioni. Ad esempio, i database front-end che supportano i siti Web possono registrare le informazioni e mettere in coda le attività con molti processi nei database back-end. Service Broker assicura che tutte le attività vengano gestite nel contesto delle transazioni per garantire affidabilità e coerenza tecnica.

Panoramica

Service Broker è un framework di recapito messaggi che consente di creare applicazioni orientate ai servizi nel database native. A differenza delle classiche funzionalità di elaborazione query che leggono continuamente i dati dalle tabelle e li elaborano durante il ciclo di vita della query, nell'applicazione orientata ai servizi sono presenti servizi di database che scambiano i messaggi. Ogni servizio ha una coda in cui i messaggi vengono inseriti fino a quando non vengono elaborati.

Service broker

I messaggi nelle code possono essere recuperati tramite il comando RECEIVE di Transact-SQL o dalla procedura di attivazione che viene chiamata quando il messaggio arriva nella coda.

Creazione di servizi

È possibile creare i servizi di database tramite l'istruzione Transact SQL CREATE SERVICE. Il servizio può essere associato alla coda di messaggi creata tramite l'istruzione CREATE QUEUE:

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

Invio di messaggi

I messaggi vengono inviati nella conversazione tra i servizi usando l'istruzione Transact-SQL SEND. Una conversazione è un canale di comunicazione che viene stabilito tra i servizi usando l'istruzione Transact-SQL BEGIN DIALOG.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

BEGIN DIALOG @dialog_handle  
FROM SERVICE ExpensesClient  
TO SERVICE 'ExpensesService';  
  
SEND ON CONVERSATION @dialog_handle (@Message) ;  

Il messaggio verrà inviato a ExpenssesService e inserito in dbo.ExpenseQueue. Poiché a questa coda non è associata alcuna procedura di attivazione, il messaggio rimarrà nella coda fino a quando non verrà letto da qualcuno.

Elaborazione di messaggi

I messaggi inseriti nella coda possono essere selezionati usando una query SELECT standard. L'istruzione SELECT non modifica la coda, né rimuove i messaggi. Per la lettura e il pull dei messaggi dalla coda, è possibile usare l'istruzione Transact-SQL RECEIVE.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

Dopo aver elaborato tutti i messaggi della coda, chiudere la conversazione usando l'istruzione Transact-SQL END CONVERSATION.

Dove si trova la documentazione per Service Broker?

La documentazione di riferimento per Service Broker è inclusa nella documentazione di SQL Server. Nella documentazione di riferimento sono incluse le sezioni seguenti:

Vedere la documentazione pubblicata in precedenza per i concetti relativi a Service Broker e per le attività di gestione e sviluppo. Questa documentazione non viene riprodotta nella documentazione di SQL Server a causa del numero ridotto di modifiche apportate a Service Broker nelle versioni recenti di SQL Server.

Novità di Service Broker

Service broker e Istanza gestita di SQL di Azure

Lo scambio di messaggi di Service Broker tra istanze di Istanza gestita di SQL di Azure e lo scambio di messaggi tra SQL Server e Istanza di gestione SQL di Azure è attualmente disponibile nell’anteprima pubblica:

  • CREATE ROUTE: La porta specificata deve essere la 4022. Vedere CREATE ROUTE.
  • ALTER ROUTE: La porta specificata deve essere la 4022. Vedere ALTER ROUTE.

La sicurezza del trasporto è supportata, ma non quella del dialogo:

  • CREATE REMOTE SERVICE BINDING non è supportata.

Service Broker è abilitato per impostazione predefinita e non può essere disabilitato. Le opzioni di ALTER DATABASE seguenti non sono supportate:

  • ENABLE_BROKER
  • DISABLE_BROKER

Non sono state introdotte modifiche significative in SQL Server 2019 (15.x). In SQL Server 2012 (11.x) sono state introdotte le modifiche seguenti.

È possibile inviare messaggi a più servizi di destinazione (multicast)

La sintassi dell'istruzione SEND (Transact-SQL) è stata estesa per abilitare il multicast supportando più handle di conversazione.

Le code espongono il tempo di accodamento del messaggio

Le code dispongono di una nuova colonna, message_enqueue_timein cui è indicato il tempo di accodamento di un messaggio.

La gestione dei messaggi non elaborabili può essere disabilitata

Tramite le istruzioni CREATE QUEUE (Transact-SQL) e ALTER QUEUE (Transact-SQL) è possibile abilitare o disabilitare la gestione dei messaggi non elaborabili aggiungendo la clausola POISON_MESSAGE_HANDLING (STATUS = ON | OFF). La vista del catalogo sys.service_queues contiene ora la colonna is_poison_message_handling_enabled per indicare se il messaggio non elaborabile è abilitato o disabilitato.

Supporto Always On in Service Broker

Per altre informazioni, vedere Service Broker con i gruppi di disponibilità Always On (SQL Server).

Passaggi successivi

L'uso più comune di Service Broker è la notifica degli eventi. Informazioni su come implementare notifiche degli eventi, configurare la sicurezza delle finestre di dialogo o ottenere altre informazioni.