Domanda

Stavamo esaminando MSMQ per la comunicazione persistente "push" dal server al client. Possono esserci fino a 1000 client per server.

In uno dei nostri test, abbiamo inviato un piccolo messaggio a 300 client offline, quindi abbiamo inviato un messaggio a un client online. L'ultimo messaggio è stato ritardato di oltre 40 minuti mentre MSMQ si faceva strada attraverso i messaggi non consegnabili (osservati tramite MMC). Usiamo anche MSMQ per il percorso di ritorno in cui funziona bene.

Esiste un modo per adattare MSMQ a questo modello di utilizzo riducendo il tempo che tenta di connettersi a un host offline? In caso contrario, c'è qualche altro prodotto di accodamento che si adatterebbe meglio o è il tuo tempo libero? Il throughput non elaborato non è una priorità, ma lo sono il numero di code in uscita e la prevedibilità / latenza massima, così come il footprint di memoria sui client (che possono essere macchine piuttosto vecchie).

È stato utile?

Soluzione 2

La nostra soluzione consisteva nel mettere in pausa a livello di codice le code alle macchine offline (avevamo già un messaggio UDP per indicare se i client erano attivi) tramite una delle interfacce COM di gestione di MSMQ.

Con le code in attesa di host disconnessi noti, MSMQ ha trascorso molto meno tempo a farsi strada tra messaggi non consegnabili.

È stata anche una bella lezione applicare un po 'di pensiero laterale quando si escogitano test per valutare le tecnologie! In generale non consiglierei MSMQ per le comunicazioni da server a client a causa di questo problema - direi che sarebbe preferibile il polling da parte dei client.

Altri suggerimenti

Puoi aumentare le prestazioni disabilitando l'inserimento nel journal e rendendo i messaggi non recuperabili ... se non ti interessa che i messaggi vadano persi.

Una soluzione rapida con lo scenario offline potrebbe essere quella di aumentare il numero di thread disponibili per MSMQ che utilizza un thread per coda in uscita. Ogni tentativo di connessione offline richiede del tempo, bloccando un thread. http://technet.microsoft.com/en-us/library/cc957498.aspx Prova a lanciare più fili che puoi.

I miei colleghi hanno lavorato con ActiveMQ e hanno affermato che è molto più flessibile e offre prestazioni migliori. Non ho lavorato personalmente con esso, ma lo esaminerei se non sei legato a .Net.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top