5

Nel mondo delle transazioni di messaggi distribuiti, sto cercando di capire le diverse parti coinvolte nello sviluppo di sistemi distribuiti. Da quello che ho capito, puoi progettare un sistema di messaggistica utilizzando il bus aziendale supportato da un sistema di code messaggi. Perché è una buona idea usare entrambi? Lo stesso può essere ottenuto programmando contro il solo sistema di accodamento dei messaggi? Quali sono i vantaggi dell'utilizzo di entrambi insieme?Perché abbiamo bisogno di quadri di bus di servizio come NService Bus/MassTransit oltre a sistemi di accodamento messaggi come MSMQ/RabbitMQ ecc.?

risposta

17

È possibile codificare direttamente contro l'infrastruttura di messaggistica e si scoprirà che ci sono pro e contro w.r.t. ogni trasporto. Ci sono molte decisioni che dovrai prendere lungo la strada, tuttavia, ed è qui che un bus di servizio può essere d'aiuto.

Lo sviluppo diretto contro il sistema di accodamento porterà inevitabilmente a varie astrazioni necessarie per evitare la duplicazione.

Un bus servizio fornirà pareri/implementazioni per:

  • di consegna del messaggio
    • esattamente-una volta (transazioni distribuite - transazioni distribuite non sono supportate da tutti i sistemi di accodamento)
    • almeno una volta (non transazionale)
    • at-mos t-once (probabilmente richiederà un po 'di elaborazione transazionale, ma si può ottenere via con transazioni senza distribuite)
  • Nuovo tentativo messaggi
  • richiesta/risposta
  • distribuzione Messaggio
  • pubblicazione/sottoscrizione non riuscita (probabilmente abbastanza facile con RabbitMQ direttamente, non tanto con MSMQ direttamente)
  • Messaggio Idempotence
  • Iniezione di dipendenza

Alcune implementazioni bus servizi di fornire un quadro di attuazione responsabili di processo (chiamato saghe dalla maggior parte). La mia opinione corrente è che un manager di processo debba essere un cittadino di prima classe come qualsiasi altra entità, ma potrebbe cambiare :)

In ogni caso, se si valutano ancora le opzioni, si può anche dare un'occhiata al mio progetto FOSS: http://shuttle.github.io/shuttle-esb/

Quindi un bus di servizio può comprarti un po 'fuori dalla scatola mentre codificare direttamente le code potrebbe essere un po' di lavoro per andare avanti.

+0

"un bus di servizio può comprare un bel po 'out-of = the-box mentre la codifica diretta contro le code potrebbe essere un po 'di lavoro per andare avanti ". Ottimo riassunto. Grazie! – Chrysalis

+0

Pubblica/Iscriviti è facile su MSMQ utilizzando MassTransit. Beh, è ​​facile come tutto ciò che è su MSMQ, comunque .. – stuartd

+0

@stuartd: Intendevo dire che quando si utilizza RabbitMQ direttamente pub/sub è abbastanza semplice mentre con MSMQ direttamente non lo è. Utilizzare un bus di servizio come shuttle-esb rende sicuramente la vita più semplice :) –

3

Non posso commentare direttamente su MassTransit, avendo solo armeggiato con esso.

Io uso NServiceBus e ne sono un fan. Penso che ci siano validi motivi per utilizzare direttamente la tecnologia di accodamento, ma ritengo che implementare il proprio ESB utilizzando MSMQ/RabbitMQ costerebbe molto più del semplice utilizzo di un prodotto commerciale (o di un prodotto open source, ad esempio MassTransit).

Quindi ti serve? No. Renderà la tua vita molto più semplice se le caratteristiche corrispondono alle tue esigenze? Assolutamente.

2

Ecco qualcosa dalla documentazione MassTransit stesso (non credo che era lì quando la domanda è stata inviata prima):