Inoltro di messaggi di Service Broker

La funzionalità di inoltro dei messaggi di Service Broker consente a un'istanza di SQL Server di accettare messaggi provenienti dall'esterno dell'istanza e di inviarli a un'istanza diversa.

L'inoltro dei messaggi può essere utilizzato da un amministratore per:

  • Garantire la connettività tra server in domini trusted diversi

  • Semplificare l'amministrazione mediante la creazione di un'unica istanza centralizzata contenente le informazioni di routing per un dominio

  • Distribuire il carico di lavoro tra più istanze

Quando l'inoltro è attivato, la tabella di routing in msdb.sys.routes determina se un messaggio proveniente da un'altra istanza è stato inoltrato. Se l'indirizzo della route corrispondente è diverso da LOCAL, SQL Server inoltra il messaggio all'indirizzo specificato. In caso contrario, il messaggio viene recapitato localmente.

Per ogni messaggio di Service Broker è impostata una durata massima e viene registato il conteggio delle operazioni di inoltro eseguite. Quando il messaggio viene inoltrato da un'istanza, il conteggio all'interno del messaggio viene incrementato. Se la durata massima del messaggio viene superata, l'istanza che esegue l'inoltro elimina il messaggio. Questa strategia consente di evitare problemi nelle situazioni in cui esiste la possibilità di loop di routing.

Inoltro e affidabilità del recapito

Un'istanza che inoltra un messaggio non invia un acknowledgement al mittente. Questa operazione viene eseguita solo dalla destinazione finale. Se il mittente non riceve un acknowledgement dalla destinazione dopo un periodo determinato, ripete l'invio del messaggio.

I messaggi inoltrati non vengono archiviati dalle istanze che eseguono l'inoltro ma i messaggi da inoltrare vengono mantenuti in memoria. La quantità di memoria disponibile per l'inoltro dei messaggi viene specificata durante la configurazione dell'endpoint di Service Broker. Questa strategia consente l'inoltro efficiente di messaggi senza informazioni sullo stato. In caso di errore dell'istanza che esegue l'inoltro dei messaggi, non viene perso alcun messaggio, poiché ogni messaggio viene mantenuto dal mittente fino alla ricezione dell'acknowledgement da parte della destinazione finale, come descritto in Protocolli di comunicazione di Service Broker.

La vista a gestione dinamica sys.dm_broker_forwarded_messages contiene informazioni sui messaggi in fase di inoltro da parte dell'istanza. L'istanza non rende persistenti i messaggi in fase di inoltro. In questa istanza tali messaggi sono presenti solo in memoria. I messaggi vengono resi persistenti dall'istanza che li invia e dall'istanza che li riceve. L'istanza che invia i messaggi non li rimuove fino alla ricezione dell'acknowledgement da parte dell'istanza di destinazione.

Protezione e inoltro

Per l'inoltro dei messaggi di Service Broker non è necessaria un'istanza di inoltro per decrittografare il messaggio inoltrato. Pertanto, è necessario configurare la protezione del dialogo solo per i database che partecipano alla conversazione.

La protezione del trasporto, tuttavia, si applica alle connessioni tra le istanze di SQL Server. Per le istanze con le quali ogni istanza di SQL Server comunica direttamente è necessario configurare tale protezione in modo appropriato. Ad esempio, se l'istanza A e l'istanza B comunicano per mezzo di un'istanza di inoltro, è necessario configurare la protezione del trasporto per l'istanza di inoltro sia per l'istanza A che per l'istanza B. Poiché le istanze non scambiano messaggi direttamente, per consentire la comunicazione tra istanze è consigliabile evitare di configurare la protezione del trasporto.