2016-06-15 22 views
5

Quale sarebbe la soluzione migliore se si dispone di un'architettura basata su eventi e un servizio che si iscrive agli eventi deve attendere più eventi (dello stesso tipo) prima di procedere alla creazione dell'evento successivo nella catena?Gestione della dipendenza da eventi multipli nell'architettura basata sugli eventi

Un esempio potrebbe essere un servizio di gestione degli ordini di libri che deve attendere che ogni libro nell'ordine sia stato gestito dal magazzino prima di creare l'evento in cui l'ordine è stato prelevato in modo che il servizio di spedizione (o qualcosa di simile) raccoglie l'ordine e inizia a prepararsi per la spedizione.

risposta

5

È possibile utilizzare il modello Aggregator, chiamato anche Convoglio parallelo.

In sostanza, è necessario disporre di un modo per identificare i messaggi che devono essere aggregati e quando è stato ricevuto il set aggregato nel suo insieme, in modo che l'elaborazione possa iniziare.

Senza uscire e buying the book *, il sito Web della piattaforma di integrazione Apache Camel ha qualche nice resource sull'implementazione del modello di aggregatore. Mentre questo è ovviamente specifico per Camel, puoi vedere che tipo di cose sono coinvolte.

* dichiarazione di non responsabilità, non sono affiliati in alcun modo con Adison Wesley, o uno qualsiasi dei del libro gli autori ...

+0

Grazie per il suggerimento. In realtà ho accesso al libro tramite Safari Books Online. Sembra che l'Aggregator sia proprio quello che stavo cercando. – Patrick

12

Un altro modello utile a fianco l'aggregatore che Tom di cui sopra è a saga pattern (un mini flusso di lavoro). L'ho usato prima con la libreria di messaggistica chiamata NServiceBus per gestire il coordinamento di più messaggi che sono correlati l'uno all'altro.

il modello è molto utile e si adatta perfettamente ai processi di lunga durata. anche se i messaggi correlati sono messaggi diversi, come OrderStarted, OrderLineProcessed, OrderCompleted.

+0

Buon suggerimento. L'ho esaminato per gestire i processi che potrebbero non riuscire durante l'esecuzione in modo che possano essere rilevati al riavvio del servizio o all'avvio di una nuova istanza. – Patrick

Problemi correlati