Domanda

Sto cercando un framework di messaggistica leggero in Java. Il mio compito è quello di elaborare gli eventi in modo SEDA: so che alcune fasi dell'elaborazione potrebbero essere completate rapidamente e altre no, e vorrei disaccoppiare queste fasi dell'elaborazione.

Supponiamo che io abbia i componenti A e B e che il motore di elaborazione (sia questo contenitore o qualsiasi altra cosa) invochi il componente A, che a sua volta invoca il componente B. Non mi interessa se il tempo di esecuzione del componente B sarà 2s , ma a me importa se il tempo di esecuzione del componente A è inferiore a 50 ms, ad esempio. Pertanto, sembra molto ragionevole che il componente A invii un messaggio a B, che B elaborerà al momento desiderato.

Sono a conoscenza di diverse implementazioni JMS e Apache ActiveMQ: sono troppo pesanti per questo. Ho cercato inutilmente alcuni messaggi leggeri (con funzionalità davvero basilari come la serializzazione dei messaggi e il routing più semplice)

Hai qualcosa da consigliare in questo numero?

È stato utile?

Soluzione

Hai bisogno di qualche tipo di persistenza (ad esempio se la tua JVM si interrompe tra l'elaborazione di migliaia di messaggi) e hai bisogno di messaggi per attraversare altre JVM?

Se è tutto in un'unica JVM e non devi preoccuparti di transazioni, recupero o perdita di messaggi se una JVM muore, allora come dice Chris sopra, gli Executors stanno bene.

ActiveMQ è piuttosto leggero; puoi usarlo in una singola JVM solo senza persistenza se vuoi; puoi quindi abilitare transazioni / persistenza / recupero / remoting (lavorando con più JVM) come e quando ne hai bisogno. Ma se non hai bisogno di nessuna di queste cose, allora è eccessivo - usa solo Executors.

Per inciso, un'altra opzione se non si è sicuri di quali passaggi potrebbero richiedere persistenza / affidabilità o bilanciamento del carico su più JVM sarebbe nascondi completamente l'uso del middleware in modo da poter passare tra le code SEDA in memoria con gli esecutori a JMS / ActiveMQ come e quando è necessario.

es. è possibile che alcuni passaggi debbano essere affidabili & amp; recuperabile (quindi necessita di qualche tipo di persistenza) e altre volte no.

Altri suggerimenti

Davvero leggero? Executors . :-) Quindi hai impostato un esecutore (B, nella tua descrizione) e A ha semplicemente inviato compiti all'esecutore.

Penso che Apache Camel copra tutte le tue esigenze. Funziona all'interno della JVM e supporta lo stile SEDA ( http://camel.apache.org/seda.html ) e routing simpe. Può essere utilizzato da solo o con spring, con un provider JMS o altri adattatori.

Ci scusiamo per aver resuscitato un vecchio thread, ma forse aiuta qualcun altro a leggerlo ... Penso che FFMQ è un buon candidato per un framework di messaggistica leggero.

AGGIORNAMENTO: tuttavia non sono sicuro che supporti i ritardi di riconsegna (il problema delle dead-code-queue). Lo troverei utile anche per i fornitori leggeri. Ma suppongo che potrebbe essere possibile con una combinazione di query MessageSelector e proprietà del messaggio.

Per aiuto a qualcun altro leggi questa discussione:
Uno dei framework di messaggistica più leggeri è Mbasseder . MBassador è un'implementazione del bus messaggi (evento) molto leggera che segue il modello di sottoscrizione di pubblicazione. È progettato per essere facile da usare e mira ad essere ricco di funzionalità ed estendibile, preservando al contempo l'efficienza e le prestazioni delle risorse.
 Il cuore delle alte prestazioni di MBassador è una struttura di dati specializzata che minimizza la contesa di blocchi in modo tale che il degrado delle prestazioni dell'accesso simultaneo sia minimo.  Caratteristiche: definizione di listener dichiarativa tramite annotazioni, sincronizzazione e / o consegna di eventi asincroni, riferimenti deboli, filtro messaggi

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