Multicasting, messaggistica, ActiveMQ vs.MSMQ?
Domanda
Sto lavorando a un sistema di messaggistica/notifica per i nostri prodotti.I requisiti fondamentali sono:
- Spara e dimentica
- Insieme persistente di messaggi, possibilmente in aggiornamento, che rimangono lì finché il mittente non dice di rimuoverli
Le librerie saranno scritte in C#.Spring.NET ha appena rilasciato una build fondamentale con molte belle astrazione di messaggistica, il che è fantastico: ho intenzione di utilizzarlo ampiamente.La mia domanda di base si riduce alla questione dei broker di messaggi.La mia architettura assomiglierà a app -> coda del broker di messaggi -> app server che ascolta, invia tutti i messaggi dove devono andare e gestisce il ciclo di vita di quei messaggi di lunga durata -> coda o argomento del broker di messaggi -> ascolto app.
Infine la domanda:Quale broker di messaggi dovrei utilizzare?Sono di parte verso ActiveMQ - L'abbiamo usato nel nostro ultimo progetto e l'abbiamo adorato.Non riesco davvero a pensare a un singolo attacco contro di esso, tranne che è Java e richiederà che Java sia installato su un server da qualche parte, e potrebbe essere difficile da vendere ad alcune delle persone che utilizzeranno questo servizio.L'altra opzione che ho considerato è MSMQ.Sono prevenuto contro di esso per qualche motivo sconosciuto e inoltre non sembra avere un ottimo supporto multicast.
Qualcuno ha usato MSMQ per qualcosa di simile?Ci sono pro o contro, cose che potrebbero influenzare il voto in un modo o nell'altro?
Un'ultima cosa, stiamo utilizzando .NET 2.0.
Soluzione
Sono un po' di parte mentre lavoro ActiveMQ ma praticamente tutti i vantaggi elencati sopra per MSMQ si applicano anche ad ActiveMQ.
Alcuni ulteriori vantaggi di ActiveMQ includono
- grande supporto per accesso client multilingue e supporto multiprotocollo
- ottimo supporto per modelli di integrazione aziendale
- una tonnellata di funzionalità avanzate Piace code esclusive E gruppi di messaggi
Lo svantaggio principale che menzioni è che il broker ActiveMQ è scritto in Java;ma puoi eseguirlo su IKVM come assembly .net se lo desideri davvero, oppure eseguirlo come servizio Windows o compilarlo in una DLL/EXE tramite GCJ.MSMQ può o meno essere scritto in .NET, ma non importa molto come viene implementato, giusto?
Indipendentemente dal fatto che tu scelga MSMQ o ActiveMQ, consiglierei almeno di considerare l'utilizzo di API NMS che, come dici tu, è perfettamente integrato in Spring.NET.Esiste un'implementazione MSMQ di questa API nonché implementazioni per TibCo, ActiveMQ e STOMP che supporteranno qualsiasi altro provider JMS tramite StompConnect.
Pertanto, scegliendo NMS come API eviterai di vincolarti a qualsiasi tecnologia proprietaria e potrai quindi cambiare facilmente fornitore di messaggistica in qualsiasi momento;invece di bloccare tutto il codice in un'API proprietaria
Altri suggerimenti
Pro per MSMQ.
- È integrato in Windows
- Supporta le transazioni, supporta anche le code senza transazioni
- È davvero facile da configurare
- Integrazione AD
- È veloce, ma dovresti confrontare ActiveMQ e MSMQ affinché il tuo traffico sappia quale è più veloce.
- .NET lo supporta natività
- Supporta il fuoco e dimentica
- Puoi sbirciare la coda, se hai lettori che si limitano a guardare.non sono sicuro di poter modificare un messaggio in coda.
Contro:
- Limite dimensione messaggio 4MB
- Limite dimensione coda 2 GB
- Gli elementi della coda vengono conservati su disco
- Non è un prodotto MS tradizionale, i documenti sono un po' incerti, o sono passati alcuni anni da quando lo ho usato.
Ecco un buon blog per MSMQ
Dare un'occhiata a zero mq.È una delle code di messaggi più veloci in circolazione.
Ti suggerisco di dare un'occhiata a TIBCO Enterprise Messaging Service - EMS, che è un prodotto di messaggistica ad alte prestazioni che supporta multicasting, routing, supporta le specifiche JMS e fornisce funzionalità a livello aziendale inclusi i tuoi requisiti come fire-forget e persistenza dei messaggi utilizzando file/database utilizzando stato condiviso.
Come riferimento, FedEx funziona su TIBCO EMS come infrastruttura di messaggistica.
http://www.tibco.com/software/messaging/enterprise_messaging_service/default.jsp
Ci sono molti altri riferimenti se li fornissi, rimarrai davvero sorpreso.
Ci sono così tante opzioni in quell'arena...
Gratuito:MantaRay un sistema peer to peer completamente compatibile con JMS.La parte interessante di Mantaray è che devi solo definire dove va il messaggio e MantaRay lo instrada comunque in modo da portare il tuo messaggio alla sua destinazione, quindi è più resistente ai guasti dei singoli nodi nel tuo tessuto di messaggistica.
Pagato:Nel mio lavoro quotidiano amministro un sistema di messaggistica IBM WebSphere MQ con diverse centinaia di nodi e l'ho trovato molto buono.Recentemente abbiamo acquistato anche Tibco EMS e sembra che sarà anche molto carino da usare.
Paolo/