Service Broker con i gruppi di disponibilità Always On (SQL Server)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2016)noDatabase SQL di AzurenoAzure SQL Data WarehousenoParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo argomento sono contenute informazioni sulla configurazione di Service Broker per poter utilizzarlo con i Gruppi di disponibilità Always OnAlways On availability groups in SQL Server 2017SQL Server 2017.

Contenuto dell'argomento

Requisiti necessari affinché i messaggi remoti vengano ricevuti da un servizio in un gruppo di disponibilità

  1. Assicurarsi che nel gruppo di disponibilità sia disponibile un listener.

    Per altre informazioni, vedere Creare o configurare un listener del gruppo di disponibilità (SQL Server).

  2. Assicurarsi che l'endpoint di Service Broker sia presente e che sia configurato correttamente.

    In ogni istanza di SQL ServerSQL Server in cui è ospitata una replica di disponibilità per il gruppo di disponibilità, configurare l'endpoint di Service Broker come riportato di seguito:

    • Impostare LISTENER_IP su 'ALL'. Con questa impostazione vengono abilitate le connessioni in qualsiasi indirizzo IP valido associato al listener del gruppo di disponibilità.

    • Impostare la porta di Service Broker sullo stesso numero di porta in tutte le istanze del server host.

      Suggerimento

      Per visualizzare il numero di porta dell'endpoint di Service Broker in un'istanza del server specifica, eseguire una query sulla colonna port della vista del catalogo sys.tcp_endpoints, dove type_desc = 'SERVICE_BROKER'.

      Nell'esempio seguente viene creato un endpoint di Service Broker con autenticazione di Windows in cui viene utilizzata la porta predefinita di Service Broker (4022) e si è in ascolto di tutti gli indirizzi IP validi.

    CREATE ENDPOINT [SSBEndpoint]  
        STATE = STARTED  
        AS TCP  (LISTENER_PORT = 4022, LISTENER_IP = ALL )  
        FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS)  
    

    Per altre informazioni, vedere CREATE ENDPOINT (Transact-SQL).

  3. Concedere l'autorizzazione CONNECT nell'endpoint.

    Concedere l'autorizzazione CONNECT per l'endpoint di Service Broker al ruolo PUBLIC o a un account di accesso.

    Nell'esempio seguente viene concessa la connessione in un endpoint di Service Broker denominato broker_endpoint al ruolo PUBLIC.

    GRANT CONNECT ON ENDPOINT::[broker_endpoint] TO [PUBLIC]  
    

    Per altre informazioni, vedere GRANT (Transact-SQL).

  4. Assicurarsi che msdb contenga una route AutoCreatedLocal o una route al servizio specifico.

    Nota

    Per impostazione predefinita, tutti i database utente, incluso msdb, contengono la route AutoCreatedLocal. Questa route corrisponde a qualsiasi nome di servizio e istanza di Service Broker e, tramite essa, viene specificato che il messaggio deve essere recapitato all'interno dell'istanza corrente. AutoCreatedLocal ha una priorità inferiore rispetto alle route che specifica esplicitamente un servizio specifico usato per comunicare con un'istanza remota.

    Per informazioni sulla creazione di route, vedere Esempi di routing di Service Broker nella versione SQL Server 2008 R2SQL Server 2008 R2 della documentazione online e CREATE ROUTE (Transact-SQL).

Requisiti per inviare messaggi a un servizio remoto in un gruppo di disponibilità

  1. Creare una route al servizio di destinazione.

    Configurare la route come riportato di seguito:

    • Impostare ADDRESS sull'indirizzo IP del listener del gruppo di disponibilità in cui è ospitato il database del servizio.

    • Impostare PORT sulla porta specificata nell'endpoint di Service Broker di ogni istanza remota di SQL Server.

      Nell'esempio seguente viene creata una route denominata RouteToTargetService per il servizio ISBNLookupRequestService . La route è destinata al listener del gruppo di disponibilità, MyAgListener, da cui viene utilizzata la porta 4022.

    CREATE ROUTE [RouteToTargetService] WITH   
    SERVICE_NAME = 'ISBNLookupRequestService',   
    ADDRESS = 'TCP://MyAgListener:4022';  
    

    Per altre informazioni, vedere CREATE ROUTE (Transact-SQL).

  2. Assicurarsi che msdb contenga una route AutoCreatedLocal o una route al servizio specifico. Per altre informazioni, vedere Requisiti necessari affinché i messaggi remoti vengano ricevuti da un servizio in un gruppo di disponibilità più indietro in questo argomento.

Attività correlate

Vedere anche

Panoramica di Gruppi di disponibilità Always On (SQL Server)
Listener del gruppo di disponibilità, connettività client e failover dell'applicazione (SQL Server)
SQL Server Service Broker