2011-12-18 15 views
6

Ho lavorato con Spring per un po 'ora per rendermi conto che non tutte le richieste in arrivo che ricevo nella mia app sono basate su HTTP. Alcune richieste sono basate su e-mail e richiedono risposte basate su e-mail, altre sono basate su socket (ricezione di notifiche quando un valore cambia nel mio negozio NOSQL). Tutti, anche se usano più o meno la stessa infrastruttura MVC.Decoupling Spring Controller MVC da HTTPServlet

Pertanto, ho pensato che forse rearchitecting l'applicazione, al fine di rimuovere l'accoppiamento tra i controller e l'infrastruttura HTTP aiuterà.

Il dispatcher non deve più richiamare direttamente i metodi del controller, ma piuttosto estrarre i parametri della richiesta e utilizzarli per creare un messaggio astratto (o evento), che quindi inserisce su un bus dei messaggi. D'altra parte, ogni controllore sottoscriverà le sue azioni (istanze della classe Action - un'implementazione del pattern Command) per diversi eventi.

Dato che sono abbastanza nuovo per Spring Integration, JMS e altre cose del genere, non ho idea di quale tecnologia di messaggistica scegliere. Inoltre, sono abbastanza sicuro che un'architettura come questa sia già stata sviluppata. Forse, potrei anche non essere sulla strada giusta.

Accetto tutti i tipi di suggerimenti su come procedere.

risposta

5

Hai ragione che la soluzione di messaggistica con un piccolo aiuto di alcuni modelli di integrazione è la "giusta" strada da percorrere.

Stai dicendo che le e-mail e alcuni database NoSQL stanno già colpendo il controller? Ciò significa che c'è un livello di traduzione tra questi sistemi e i tuoi controller. Con Spring integration si utilizzerà Mail-Receiving Channel Adapter per elaborare le e-mail in arrivo e TCP and UDP Support per le notifiche NoSQL. I controller MVC Spring possono ancora essere utilizzati per richieste web "vere", accedendo al canale dei messaggi sottostante.

Ogni adattatore di canale dispone di un set univoco di transformers per convertire lo specifico adattatore message in formato canonico. Alla fine i messaggi da ciascun endpoint sarebbero routed allo stesso message channel.

Quindi, in effetti, il tuo esempio è perfetto per la soluzione di tipo ESB. Scopri anche Mule ESB, che è ancora più maturo e potente.

Problemi correlati