2011-10-04 12 views
8

Volevo solo ottenere conferma su come funziona l'invio di messaggi a code di messaggi transazionali remoti.Come funziona la consegna transazionale di MSMQ?

Supponiamo che io ho una due macchine, A e B.

macchina A ha una coda di transazione che viene utilizzato per la ricezione dei messaggi. Un servizio Windows controlla questa coda e fa qualcosa con i dati (la persiste su un server SQL). macchina B è in esecuzione un'applicazione che ha bisogno di scrivere alla coda sulla macchina A.

Alcune domande:

  1. Quando si invia il messaggio, è una copia locale creata sulla macchina B, prima che arrivi consegnato alla macchina A?
    a. In tal caso, questo comportamento è predefinito o si verifica solo quando viene inviata la proprietà "IsRecoverable"?
    b. Il fatto che la coda sia transazionale ha qualche effetto su questo comportamento?

  2. Poiché sto utilizzando una coda di transazione, dove sono i dati una volta che la transazione è stata commessa? a. È seduto localmente, in attesa che il servizio msmq invii il messaggio alla coda remota?
    b. Oppure il messaggio è seduto in coda sul computer remoto?

Sto riscontrando problemi nell'interpretazione della documentazione. In alcuni punti vedo che il comportamento del negozio e di inoltro è descritto, ma ho difficoltà a capire se questo è il comportamento predefinito con code transazionali o se devo fare qualcosa in modo esplicito per farlo funzionare.

risposta

6

La cosa principale da comprendere su MSMQ transazionale è che in realtà ci sono 3 transazioni distinte coinvolte in una trasmissione transazionale di un messaggio in una coda remota.

  1. Il mittente scrive il messaggio in una coda temporanea locale.
  2. Il gestore code sul dispositivo mittente trasmette il messaggio attraverso il cavo al gestore code sul computer destinatario.
  3. Il servizio ricevente elabora il messaggio in coda e quindi rimuove il messaggio dalla coda.

Quindi, in risposta alle tue domande:

Quando si invia il messaggio, è una copia locale creata sulla macchina B, prima di che venga consegnato a macchina A?

Se è così, è questo comportamento di default, o avviene solo quando la proprietà "IsRecoverable" viene inviato?

Per impostazione predefinita. Questo è noto come store and forward.

Il fatto che la coda sia transazionale ha qualche effetto su questo comportamento ?

No tranne quando si verifica un errore.

Poiché sto utilizzando una coda di transazione, dove sono i dati una volta eseguita la transazione ?

Dipende quale operazione si intende (vedi sopra)

è IT seduti a livello locale, in attesa che il servizio MSMQ per recapitare il messaggio alla coda remota?

Solo se la coda remota non è disponibile.

Oppure Il messaggio è seduto in coda sul computer remoto?

Se il servizio ricevente non riesce a elaborare il messaggio correttamente (c'è un'eccezione nel gestore) il messaggio rimarrà sulla coda remota.

+0

Grazie Hugh, questo è molto utile! – Kartik