2012-09-02 48 views
6

Jestem nowicjuszem w C++, ale mam duże doświadczenie w Java EE.C++ i JMS - jak połączyć te dwa?

Potrzebuję napisać małą aplikację, która jest mocno asynchroniczna. Odbiera dane z HTTP i przechowuje je w kolejce (musi mieć gwarantowaną dostawę i bardzo wysoką przepustowość), coś w rodzaju ActiveMQ lub OpenMQ, może za pośrednictwem JMS.

Następnie inna aplikacja/odbiornik C++ pobiera dane z kolejki (przez niektórych odbiorców, które są aktywowane bezpośrednio przez kolejkę, a nie przez moją pulę), łączy się z bazą danych MySQL i wykonuje niektóre obliczenia logiki biznesowej i wysyła wiadomość do kolejna kolejka.

W języku Java EE będzie to aplikacja internetowa, która będzie wysyłać wiadomości do kolejki JMS. Fasola sterowana komunikatami będzie konsumentami tych komunikatów w module EJB, a moduł EJB sesji będzie wysyłać komunikaty do wychodzącej kolejki JMS.

Czy ktoś z C++ doświadczenie proszę wyjaśnić pewne podstawy do mnie:

  1. Czy JMS jedyną opcją dla C++ dla kolejek gwarantowanych dostaw? Czy sugerujesz ActiveMQ lub coś innego, mając na uwadze to, że komunikat Konsument będzie w C++.

  2. Czy muszę utworzyć coś w rodzaju demona wielowątkowego w C++, który nasłuchuje komunikatów kolejki, czy jest to tworzenie wątku (zużycie wiadomości) w ramach implementacji klientów C + ActiveMQ?

Wszelkie inne sugestie dotyczące realizacji powyższego scenariusza byłyby bardzo mile widziane.

EDYCJA: Wolałbym, aby broker komunikatów i klient byli w C++. ActiveMQ to produkt Java, którego naprawdę nie potrzebujemy.

+0

Zobacz [ZeroMQ] (http://www.zeromq.org/). To może być to, czego szukasz. – Codo

+0

ZeroMQ wygląda na bardzo niskim poziomie dla nowicjuszy, takich jak ja. Szukam czegoś, co ma już bibliotekę z wyższym poziomem abstrakcji niezawodnej kolejki komunikatów. – bozo

+0

Czy prawnie zastrzeżonym oprogramowaniem jest opcja? Następnie spójrz na IBM WebSphere MQ, który oferuje szeroki wachlarz bibliotek klienckich ... –

Odpowiedz

18

1 - JMS - Java Message Service - jest tylko interfejsem API dla tylko Java i Java. Nie ma standardu w przesyłaniu wiadomości, który dotyczy C++, z wyjątkiem AMQP (co, moim zdaniem, nie działa tak naprawdę tak dobrze, jak powinno). Do C++ musisz polegać na konkretnych bibliotekach dostawców dla każdej implementacji brokera komunikatów.

Propozycje wdrożeń:

  • ActiveMQ - Ma ładny C++ API (zwany CMS), które są modelowane i nazwane JMS - tak poczujesz zaznajomieni z API. Główny broker będzie działał na Javie, tym mniej - może to być najprostszy wybór.

  • IBM WebSphere MQ - nie jest to open source, broker klasy korporacyjnej, który działa natywnie (napisany w C) i ma biblioteki C++. Raczej przyjemnie, gdy przejdziesz przez krzywą uczenia się, a cena nie ma znaczenia.

  • RabbitMQ - Bardzo popularny, niezawodny system przesyłania wiadomości o wysokiej wydajności i otwartym kodzie źródłowym. Ma biblioteki klienta C++, ale jest napisany w języku Erlang i działa w środowisku wykonawczym erlang/otp.

  • Apache QPID - Mniej znany broker AMQP/JMS. Występuje w dwóch wersjach: serwerowej, Java i C++, gdzie broker C++ ma lepszą wydajność. Zawiera biblioteki klienta C++.

2 - W przypadku wielowątkowości specyfikacja JMS również nie jest rozwiązaniem.Jest bardziej podobny do kontenera Java EE (lub Spring Framework), który po prostu zagłusza zarządzanie wątkami i odciąga od niego dewelopera. ActiveMQ nie ma w tym przypadku więcej niż kilku klas wsparcia i o ile mi wiadomo, żadna z innych bibliotek dostawców też nie. Poszukaj więc biblioteki, która owija się w wątki (ja nie mam pojęcia) lub poradzę sobie z wątkami konsumentów. Nie powinno to być tak nieładne, dobrze zrobione.

+1

Zaskoczony, aby zobaczyć tę odpowiedź, otrzymał tylko pięć głosów w górę. To jest świetne. Niestety mogłem tylko dać. – Mats