6

私はC++の初心者ですが、JavaEEの経験が豊富です。

非同期性の高い小さなアプリを作成する必要があります。HTTPからデータを受信し、ActiveMQやOpenMQなどのキュー(配信が保証され、非常に高いスループットが必要)に、おそらくJMSを介して格納します。

次に、別のC ++アプリ/リスナーがキューからデータを取り出し(プーリングではなく、キューによって直接アクティブ化されるリスナーを介して)、MySQLデータベースに接続し、ビジネスロジックの計算を行って、メッセージを別のキューに送信します。

Java EEでは、これはメッセージをJMSキューに送信するWebアプリになります。メッセージ駆動型Beanは、EJBモジュール内のこれらのメッセージのコンシューマーであり、セッションEJBはメッセージを発信JMSキューに送信します。

C ++の経験がある人は、私にいくつかの基本を説明できますか?

  1. 保証された配信キューのC++の唯一のオプションはJMSですか?メッセージConsumerがC++であるということを念頭に置いて、ActiveMQまたは他の何かを提案しますか。

  2. キューメッセージをリッスンするある種のマルチスレッドデーモンをC++で作成する必要がありますか、それともこのスレッド作成(メッセージ消費)はActiveMQのC +コンシューマーの実装の一部ですか?

上記のシナリオを実装する方法に関する他の提案をいただければ幸いです。

編集済み:メッセージブローカーとクライアントをC++にすることをお勧めします。ActiveMQはJava製品であり、実際には必要なものではありません。

4

1 に答える 1

22

1-JMS-Javaメッセージサービス-は、JavaおよびJava専用のAPIリファレンスです。AMQPを除いて、C ++に適用されるメッセージングの標準はありません(これは、私の意見では、実際にはクロス実装が適切に機能していないことです)。C ++を使用するには、メッセージブローカーの実装ごとに特定のベンダーライブラリに依存する必要があります。

実装の提案:

  • ActiveMQ-JMSにちなんでモデル化および命名された優れたC++API(CMSと呼ばれる)を備えているため、APIに慣れることができます。メインブローカーはJavaで実行されますが、それ以外の場合は、最も簡単な選択かもしれません。

  • IBM WebSphere MQ-オープンソースではなく、ネイティブ(Cで記述)を実行し、C++ライブラリーを備えたエンタープライズクラスブローカー。あなたが学習曲線を乗り越えて、価格が重要ではないとき、かなりいいです。

  • RabbitMQ-高性能でオープンソースの非常に人気のある信頼できるメッセージング。C ++クライアントライブラリがありますが、Erlangで記述されており、erlang/otpランタイム内で実行されます。

  • ApacheQPID-あまり知られていないAMQP/JMSブローカー。サーバー側には、JavaとC ++の2つの種類があり、C++ブローカーのパフォーマンスが向上しています。C++クライアントライブラリが付属しています。

2-マルチスレッドの場合、JMS仕様にも実際にはソリューションが付属していません。これは、スレッドの管理を単純にラップし、開発者をスレッドから解放するJava EEコンテナー(またはSpring Framework)に似ています。この場合、ActiveMQには少数のサポートクラスしか付属していません。私が知る限り、他のベンダーライブラリにも付属していません。したがって、スレッドをラップするライブラリを探すか(私には手がかりがありません)、コンシューマスレッドを自分で処理します。それはそれほど厄介なことではなく、正しく行われるべきです。

于 2012-09-03T04:56:10.680 に答える