Condividi tramite


Il sistema di accodamento dei messaggi può operare su il bilanciamento del carico della rete

Questo articolo descrive come l'accodamento messaggi Microsoft (MSMQ) può funzionare con Network Load Balancing (NLB).

Versione originale del prodotto: Microsoft Message Queuing
Numero KB originale: 899611

Introduzione

L'articolo seguente illustra come MSMQ può funzionare su NLB. Questo articolo illustra anche le possibili configurazioni non corrette di MSMQ.

Importante

In questo articolo sono contenute informazioni relative alla modifica del Registro di sistema. Assicurarsi di eseguire il backup del Registro di sistema prima di modificarlo. Assicurati di sapere come ripristinare il registro in caso di problemi. Per altre informazioni su come eseguire il backup, il ripristino e la modifica del Registro di sistema, vedere Informazioni del Registro di sistema di Windows per utenti avanzati.

Configurazioni supportate

MSMQ è supportato in un ambiente di bilanciamento del carico di rete per l'invio e la ricezione di messaggi nelle configurazioni seguenti.

  • Messaggistica non transazionale tramite Direct=TCP
  • Messaggistica non transazionale tramite Direct=OS con convalida disabilitata
  • Messaggistica non transazionale tramite Direct=HTTP
  • Messaggistica transazionale usando una configurazione specifica che usa server di archiviazione e inoltro e un singolo server back-end.

Annotazioni

Solo le code private sono supportate come destinazioni in ciascuna di queste configurazioni. Poiché il nome della rete virtuale non avrà un oggetto di servizio directory Active Directory corrispondente, non è possibile interrogare le proprietà della coda di destinazione. È possibile inviare messaggi alle code pubbliche purché si acceda alle code pubbliche usando un nome di formato diretto anziché il percorso standard.

Messaggistica non transazionale tramite Direct=TCP

Questa configurazione funziona senza modifiche di configurazione specifiche.

Messaggistica non transazionale tramite Direct=OS

Questa configurazione funziona solo quando la convalida è disabilitata. Per disabilitare la convalida, è necessario aggiungere la chiave del Registro di sistema seguente in MSMQ 2.0 insieme a Windows 2000 e in MSMQ 3.0 insieme a Windows XP o Windows Server 2003.

Avviso

Se si modifica il Registro di sistema in modo errato tramite l'Editor del Registro di sistema o con un altro metodo, possono verificarsi gravi problemi Questi problemi potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non è in grado di garantire la soluzione di tali problemi. La modifica del Registro di sistema è a esclusivo rischio dell'utente. Seguire questa procedura e quindi uscire dall'editor del Registro di sistema:

  1. Fare clic su Start, su Esegui, digitare regedit, e quindi fare clic su OK.
  2. Individuare e quindi fare clic sulla chiave seguente nel Registro di sistema:
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters
  3. Scegliere Nuovo dal menu Modifica, quindi fare clic su Valore DWORD.
  4. Digitare IgnoreOSNameValidation e quindi premere INVIO.
  5. Scegliere Modifica dal menu Modifica.
  6. Digitare 1, quindi fare clic su OK.

Per impostazione predefinita, MSMQ verifica il messaggio ricevuto per determinare se il messaggio è destinato al computer locale. Se il messaggio non è destinato al computer locale, il messaggio viene rifiutato.

Quando un messaggio viene inviato a un server che si trova dietro un servizio di bilanciamento del carico di rete, il messaggio viene inviato usando il nome del servizio di bilanciamento del carico o usando il nome di rete assegnato all'INDIRIZZO IP virtuale nel servizio di bilanciamento del carico di rete. Il servizio di bilanciamento del carico di rete instrada quindi il messaggio a un ricevitore MSMQ. Tuttavia, il gestore code locale nel ricevitore MSMQ identifica che il nome del computer e il nome di destinazione nel messaggio non corrispondono e il gestore code scarta il messaggio. Dopo aver impostato questo valore del Registro di sistema, MSMQ non convalida più il nome del computer di destinazione e accetterà il messaggio.

Messaggistica non transazionale tramite Direct=HTTP

Questa configurazione è supportata senza modifiche di configurazione specifiche.

Messaggistica transazionale tramite una configurazione specifica che usa server di archiviazione e inoltro e un singolo server back-end

In questa configurazione la messaggistica transazionale supporta solo la messaggistica HTTP quando i nodi che ricevono messaggi eseguono il mapping della coda di ricezione a un singolo server back-end. I messaggi transazionali HTTP non sono supportati quando le code di destinazione si trovano nei singoli nodi.

Per ulteriori informazioni su questa configurazione, consultare il white paper Microsoft Message Queuing (MSMQ) HTTP Deployment Scenarios for Windows Server 2003 e Windows XP Professional.

Una configurazione per la messaggistica transazionale dove risiedono le code di destinazione in ogni nodo membro dietro un bilanciatore di carico non supporta l'invio o la ricezione di messaggi per i motivi seguenti:

  • Messaggi duplicati
  • Messaggi non riconosciuti da parte dei mittenti
  • Transazioni incomplete

Messaggi transazionali e riconoscimenti

Quando un messaggio transazionale viene ricevuto da un computer, il messaggio viene scritto nella risorsa di archiviazione, il messaggio viene registrato e viene inviato un riconoscimento dell'ordine al mittente. Il riconoscimento dell'ordine viene inviato all'indirizzo IP da cui proviene il messaggio originale tramite direct=TCP. Il messaggio viene quindi ricevuto dal mittente e il messaggio viene rimosso dalla coda in uscita.

Quando un riconoscimento non viene ricevuto dal server di invio entro un determinato periodo di tempo, il messaggio originale viene reinviato. Quando il messaggio arriva alla destinazione, il server di destinazione esamina il log e rileva che il server ha già ricevuto tale messaggio. Pertanto, il server di destinazione rifiuta il messaggio e restituisce un altro riconoscimento. Il server di destinazione continuerà a inviare riconoscimenti fino a quando il mittente non riceverà il riconoscimento dell'ordine. La registrazione impedisce la ricezione di un messaggio duplicato e il riconoscimento dell'ordine conferma al mittente che il messaggio è stato ricevuto.

Problemi con i servizi di bilanciamento del carico di rete e i messaggi transazionali

Quando un messaggio viene inviato tramite un servizio di bilanciamento del carico, il computer di destinazione visualizza il messaggio proveniente dal servizio di bilanciamento del carico. Il computer di destinazione invia quindi il riconoscimento dell'ordine tramite una nuova sessione. Di conseguenza, il servizio di bilanciamento del carico non può usare la stessa logica per mantenere lo stato per un server Web o per un servizio simile.

Il problema più comune in questo scenario è che diversi server inviano messaggi in un servizio di bilanciamento del carico, ma tutti i riconoscimenti degli ordini vengono inviati al server non corretto. Questo comportamento causa l'accumulo di messaggi non riconosciuti nella coda in uscita dei computer mittenti. Inoltre, quando il riconoscimento dell'ordine non viene ricevuto dal mittente, il mittente invierà nuovamente il messaggio. Il secondo tentativo di inviare il messaggio tramite il servizio di bilanciamento del carico può inviare il messaggio a un computer diverso. Il computer non avrà visto questo messaggio in precedenza e il messaggio verrà elaborato come nuovo messaggio. Tenere presente che la convalida è stata disabilitata per consentire ai messaggi di attraversare il NLB (Network Load Balancer).

Un messaggio inviato in un servizio di bilanciamento del carico può essere ricevuto ed elaborato una volta da tutti i server che si trovano dietro il servizio di bilanciamento del carico prima che venga ricevuto un riconoscimento dell'ordine. Inoltre, le transazioni che si estendono su più messaggi non possono sempre essere elaborate o arrivate in ordine. Pertanto, MSMQ non supporta l'invio di messaggi transazionali quando si utilizza un NLB.