2012-09-02 7 views
6

Sono un debuttante in C++, ma ho molta esperienza in Java EE.C++ e JMS - come collegare i due?

Ho bisogno di scrivere una piccola app che è fortemente asincrona. Riceve i dati da HTTP e li archivia in una coda (deve avere una consegna garantita e un throughput molto elevato), qualcosa come ActiveMQ o OpenMQ, magari tramite JMS.

Quindi un'altra app/listener C++ estrae i dati dalla coda (tramite un listener attivato dalla coda direttamente, non dal mio pool), si connette a un database MySQL e esegue alcuni calcoli di logica aziendale e invia il messaggio a un'altra coda.

In Java EE questa sarebbe un'app Web che invierebbe messaggi a una coda JMS. I bean basati sui messaggi sarebbero consumatori di questi messaggi in un modulo EJB e un bean Session invierà messaggi alla coda JMS in uscita.

Can qualcuno con C++ esperienza spiegare alcuni principi fondamentali per me:

  1. è JMS l'unica opzione per C++ per le code di consegna garantiti? Suggerite ActiveMQ o qualcos'altro, avendo in mente che il messaggio Consumer sarebbe in C++.

  2. Devo creare una specie di demone multi-threaded in C++ che sia in ascolto per i messaggi in coda, o questa creazione di thread (consumo di messaggi) è parte dell'implementazione di C + consumer di ActiveMQ?

Qualsiasi altro suggerimento su come implementare lo scenario sopra sarebbe molto apprezzato.

MODIFICATO: Preferirei un broker di messaggi e un client in C++. ActiveMQ è un prodotto Java, che non è proprio quello di cui abbiamo bisogno.

+0

Dai un'occhiata a [ZeroMQ] (http://www.zeromq.org/). Potrebbe essere quello che stai cercando. – Codo

+0

ZeroMQ sembra molto di basso livello per un principiante come me. Sto cercando qualcosa che abbia già una libreria con un'astrazione di livello superiore di una coda di messaggistica affidabile. – bozo

+0

Il software proprietario è un'opzione? Dai un'occhiata a IBM WebSphere MQ, che offre una vasta gamma di librerie client ... –

risposta

18

1 - JMS - Java Message Service - è solo un riferimento API solo per Java e Java. Non esiste uno standard nella messaggistica applicabile a C++ tranne AMQP (che, a mio parere, non funziona in realtà come una croce). Per C++ devi fare affidamento su specifiche librerie di venditori per ogni implementazione del broker di messaggi.

Suggerimenti di implementazioni:

  • ActiveMQ - Ha una bella API C++ (chiamato CMS) che è modellato e prendono il nome JMS - così vi sentirete familiarità con l'API. Il broker principale funzionerà su Java non di meno - potrebbe essere la scelta più semplice.

  • IBM WebSphere MQ - Non open source, broker di classe enterprise che esegue nativo (scritto in C) e ha librerie C++. Piuttosto carino quando superi la curva di apprendimento e il prezzo non ha importanza.

  • RabbitMQ - Messaggistica affidabile molto popolare con prestazioni elevate e open source. Ha librerie client C++ ma è scritto in Erlang e gira all'interno del runtime di erlang/otp.

  • Apache QPID - Broker AMQP/JMS meno noto. È disponibile in due versioni server lato, Java e C++, dove il broker C++ ha prestazioni migliori. Viene fornito con librerie client C++.

2 - per il multi threading, le specifiche JMS non davvero venire con una soluzione neanche.È più simile al contenitore Java EE (o Spring Framework) che semplicemente avvolge la gestione dei thread e allevia lo sviluppatore da esso. ActiveMQ non viene fornito con molte più classi di supporto in questo caso e, per quanto ne so, nessuna delle altre librerie di vendor fa. Quindi, cerca una libreria che leghi il threading (non ne ho la minima idea) o che gestisca personalmente i thread dei consumatori. Non dovrebbe essere così disordinato, fatto bene.

+1

Sorpreso di vedere questa risposta ha solo cinque voti. È eccellente. Purtroppo potrei dare solo uno. – Mats