Introduzione a MSMQS con ASP

di Chris Blexrud, in Database,

Ci sono casi in cui la funzionalità di cui avete bisogno per la vostra pagina richiede un uso intenso del processore. Può addirittura succedere che i tempi lunghi di risposta del server in tale situazione causi un time-out della pagina ASP o che comunque gli utenti abbandonino il sito prematuramente. Una soluzione in questi casi potrebbe essere l'impiego di Microsoft Message Queue (MSMQ-Coda di gestione dei messaggi) per delegare il carico ad un altro sistema.

Microsoft Message Queue

MSMQ (nome in codice "Falcon") è un servizio che gira su Windows NT e che fornisce le possibilità di comunicazione asincrona tra applicazioni. MSMQ è parte dell'Option Pack 4 e gioca un ruolo centrale nell'architettura DNA di Microsoft.

Ci sono sette diverse installazioni di MSMQ. Le tre principali sono Primary Enterprise Controller (PEC), Independent Client e Dependent Client . Il server PEC è l'opzione che installa l'MSMQ network for enterprises, ed è necessaria una sola installazione. L'installazione Independent Client avviene tipicamente su di un web server. Un client 'indipendente' (Indipendent Client) può gestire i messaggi localmente, in modo da essere operativo anche quando il Server PEC non è disponibile. Un client 'dipendente' (Dependent Client), invece, non possiede la sua coda di messaggi locale e quindi non funziona a meno che non sia disponibile il server PEC.

Immagine

Il concetto alla base di MSQM è molto semplice: si tratta di una specie di sistema di e-mail automatico tra applicazioni. Un messaggio viene, per così dire, 'impachettato' e posto in attesa in una coda fino a quando il destinatario non sia pronto a riceverlo.Queste code fanno si che MSMQ possa garantire la consegna del messaggio a prescindere dallo stato e dalla affidabilità della rete.

Sempre in analogia con un messaggio di e-mail, i messaggi MSMQ hanno un mandante ed un ricevente. I riceventi sono quelli che hanno accesso alla coda (in accordo agli schemi per la sicurezza di NT). Questo implica che un singolo messaggio in coda potrebbe in generale avere riceventi multipli - detti responder . Il mandante del messaggio è di solito il web server (IIS), mentre il ricevente è normalmente la vostra applicazione che gira su di un computer diverso. Notate che non si richiede che l'altra applicazione giri su di un computer diverso dal web server, ma una tale configurazione risulta essere assai scalabile.

MSMQ può anche comunicare con altri sistemi di messaging. Level 8 System, una ditta indipendente (www.level8.com), sta sviluppando un prodotto per comunicare con MSMQ su piattaforme quali Sun Solaris, HP-UNIX, OS/2, VMS e AS/400.

L'architettura MSMQ è composta da un numero arbitrario di server che instradano, inviano e ricevono messaggi. Ognuno di questi server può contenere un numero arbitrario di code di messaggi (o nessuna). All'interno di ogni coda possono esserci un numero arbitrario di messaggi.

Come praticamente tutti i servizi di BackOffice, MSMQ offre agli sviluppatori una API di tipo COM (mwoa.dll). Benchè l'Object Model esposto da MSQM sia composto da nove classi, la maggior parte delle applicazioni utilizza normalmente solo 3 di queste:

MSMQQueueInfo
,
MSMQQueue
, e
MSMQMessage

MSQMQueueInfo (Queue = coda)

MSMQQueueInfo vi permette di creare, aprire e rimuovere code di messaggi. Al fine di operare su di una coda, occorre per prima cosa indicare il path (PathName). Questa proprietà assegna un nome alla coda ed indica il computer su cui essa risiede.

  <% 

 Dim objQueueInfo

 Dim objQueue

 Set objQueueInfo=Server.CreateObject("MSMQ.MSMQQueueInfo")

 objQueue.PathName = ".\MyQueue"

 Set objQueue = objQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)

  %>

Questo codice apre una coda di nome MyQueue localmente. Per prima cosa si inizializza una variabile (operazione di per se non obbligatoria, ma che è buona pratica esegure) e crea un istanza della classe

MSMQQueueInfo
. La linea seguente assegna il nome e il path della coda che si desidera creare. L'ultima linea apre in effetti la coda. Qualora la coda risieda su di un diverso computer, è sufficiente sostituire il punti col nome del server.

  objQueue.PathName = "NomeDiUnaltroComputer\MyQueue"

Quando aprite la coda, occorre specificare due parametri: Access e ShareMode (modalità di accesso e modalità di condivisione). Access dichiara l'uso che verrà fatto della cosa. I valori possibili per tale parametro sono definiti nell'enumeratore di MQACCESS. Esso ha tre possibili valori:

MQ_PEEK_ACCESS
(32),
MQ_RECEIVE_ACCESS
(1), e
MQ_SEND_ACCESS
(2).

MQ_PEEK_ACCESS si usa per leggere i messaggi all'interno della coda specificata senza rimuoverli. Quando si usa MQ_RECEIVE_ACCESS, i messaggi in coda vengono rimossi mano a mano che vengono letti. MS_SEND_ACCESS si usa per mandare messaggi alla coda, non per ricevere messaggi.Osservate che la funzione open restituisce un puntatore all'oggetto MSMQQueue. Questo oggetto indica gli oggetti inviati e quelli ricevuti. MSMQQueue verrà spiegato più sotto.

La creazione e la distruzione delle code di messaggi avviene in maniera del tutto simile all'apertura di una coda: assegnate il PathName ed invocate le funzioni Create o Delete.

  <% 

 Dim objQueue

 Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")

 objQueue.PathName = ".\MyQueue"

 objQueue.Create

  %> 

  <%

 Dim objQueue

 Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")

 objQueue.PathName = ".\MyQueue"

 objQueue.Delete

  %>
3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata