Domanda

Sto pensando di aggiungere una funzione coda in un prodotto basato su un mucchio di servizi WCF. Ho letto alcuni su MSMQ, prima ho pensato che fosse quello di cui avevo bisogno, ma non sono sicuro e sto pensando di mettere la coda in una tabella di database. Mi chiedo se Somone qui abbia ricevuto un feedback su quale strada da percorrere.

Pusa, sto pianificando di avere un servizio WCF di facciata chiamato su HTTP. Il servizio di facciata dovrebbe scrivere solo tutti i messaggi in arrivo in una coda per dare una risposta rapida al sistema di chiamata. I messaggi in coda devono quindi essere elaborati da un altro componente, un servizio WCF o un servizio Windows a seconda della mia scelta di coda.

Il prodotto è in esecuzione in un ambiente bilanciato del carico con server Web da 2 a n.

Le opzioni che sto prendendo in considerazione e le domande che ho sono:

  1. Per lasciare che la facciata WCF scriva su un MSMQ e quindi abbia un servizio WCF di leggere da questa coda per eseguire l'elaborazione dei messaggi. Ciò di cui non mi sento sicuro per questa alternativa da ciò che ho letto è come funzionerà in un ambiente bilanciato del carico.

1a. Dove dovrebbero essere collocati gli MSMQ? Uno su ogni server web? Uno su un server separato? Mulitple su un server separato? (Non considerando la necessità di ridondanza e che i dati in rari casi potrebbero essere persi e rinnovati)

1b. In che modo il design ha influenzato se voglio il sistema ridondante? Mi piacerebbe essere Alble per perdere un server (non viene mai più online) con in mano l'MSMQ senza perdere i dati in quella coda. Da quello che ho letto su MSMQ che mi lascia all'unica opzione di posizionare MSMQ su un cluster di Windows. È corretto? (Vorrei evitare di usare un cluster di Windows per questo).

  1. La seconda alternativa di progettazione è consentire al servizio WCF della facciata di scrivere la coda in un database. Quindi avere due o più servizi Windows per eseguire l'elaborazione della coda. Non ho domande su questa alternativa. Se ti chiedi perché non lo scelgo in quanto mi sembra più semplice, allora perché mi piacerebbe costruirlo non introdurre alcun servizio Windows alla soluzione, che credo che MSMQ ottenga funzionalità che non voglio Codice io stesso e sono anche curioso di usare MSMQ come non l'ho mai usato prima.

Cordiali saluti Håkan

È stato utile?

Soluzione 2

Dopo aver letto un po 'di più sul sottojet, ho deciso di non usare MSMQ. Sembra che non abbia davvero alcun motivo per andare su questa strada. Ho bisogno di questo per non essere transazionale e, a quanto ho capito, nessuna delle tecniche di journaling o lettere morte mi aiuterà con il mio requisito di ridondanza.

Tutti i miei componenti saranno online la maggior parte del tempo (forse un paio d'ore all'anno quando hanno avuto problemi di accesso).

MSQM aggiungerà solo complessità alla soluzione eccitante, un'altra tecnica e forse un altro server di cui tenere traccia.

Per ottenere la massima ridondanza per prevenire la perdita di dati in MSMQ, avrò bisogno di un cluster di Windows o implementare invia/riceve a più code identiche. Non voglio fare nessuno di questi.

Tutto questo mi ha portato a fronteggiare la mia applicazione di ricezione con una facciata WCF che accetta le chiamate HTTP a scrivere in una coda di database. Questo database è già protetto dalla perdita di dati. La coda sarà intervistata da istanze attive di un servizio di Windows contenente tutta la pesante logica aziendale. Con la bassa priorità di processo, questi servizi potrebbero essere ospitati sui nodi già esistenti utilizzati dall'applicazione Web di carico. Se avessi il tempo di usare MSMQ o se ne avessi bisogno per un altro motivo nella mia applicazione, potrei cambiare la mia decisione.

Altri suggerimenti

OK, quindi non stai utilizzando WCF con l'integrazione MSMQ, stai utilizzando WCF per creare messaggi MSMQ come prodotto finale. Ciò semplifica le cose a "Come caricare l'equilibrio MSMQ?"

La disposizione che usi si basa su ciò che funziona meglio per te. Potresti avere più webservers che inviano messaggi a una coda remota su una macchina centrale. Invece potresti avere un Webservers che inserisce messaggi nelle code locali con una macchina centrale che interrompe le code per nuovi arrivi.

Non è necessario raggruppare MSMQ per renderlo resiliente. Puoi invece rendere il tuo codice resiliente in modo che faccia affrontare messaggi persi usando code di lettere morte, code transazionali, journaling e così via. Il clustering hardware è l'opzione facile :-)

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