複数言語の ActiveMQ パブリッシャーおよびサブスクライバー (C++ Java)
質問
ActiveMQ を、2 つのプロセスで C++ コンポーネントと Java コンポーネント間で通信するメッセージ ブローカーとして使用したいと考えています。例えば。C++ コンポーネントはパブリッシャーであり、Java コンポーネントはサブスクライバーです (複数のサブスクライバーが存在する可能性があります)。ActiveMQ の Web サイトを見ると、OpenWire と ActiveMQ-CPP というツールについて言及されています。ただし、Web サイト上のすべての例では、プロデューサーとコンシューマーの両方に対して同じ言語が使用されています。
私の質問は次のとおりです。
1.ActiveMQ は異なる言語のプロデューサー/コンシューマーに対して機能しますか?
2.異なるプロセスで?どうやって?
解決
OpenWire はプロトコルであるため、理論的にはどこにでも実装できますが、すべての言語に完全な実装が存在するという意味ではありません。C++ クライアントの細かい部分には次のように書かれています。
「バージョン 2.0 の時点で、ActiveMQ-CPP はいくつかの例外を除いて OpenWire v2 プロトコルをサポートしています。ObjectMessage - C++ では ObjectMessage に含まれるオブジェクトを再構築できないため、ObjectMessage が送信されるキューまたはトピックにアプリケーションがサブスクライブされている場合、メッセージは受信できますが、オブジェクトを抽出することはできません。それから。"
したがって、プロセス間でデータを送信する場合は、API を使用するように C++ コンポーネントと Java コンポーネントを作成します (ActiveMQ-CPP を使用している場合は、ObjectMessage タイプを使用しないように注意してください)。次に、ActiveMQ サーバーを実行します...プログラムに接続するように指示すれば、機能するはずです。
ただし、両方のクライアントを制御するときにプロセス間通信を実際に実行しようとしている場合、これは少し強引になる可能性があります。に対する反応に興味があるかもしれません Java と C++ の間の IPC に最適なアプローチは何ですか? そして Linux 上の Java/C++ アプリの共有メモリ IPC に代わる優れた代替品
他のヒント
直接のActiveMQのフロントページから:
Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Ruby, Perl, Python, PHP
* OpenWire for high performance clients in Java, C, C++, C#
* Stomp support so that clients can be written easily in C, Ruby, Perl,
Python, PHP, ActionScript/Flash, Smalltalk to talk to ActiveMQ as well
as any other popular Message Broker
私たちは、PHP(ストンプを使用)とJava(OpenWireを使用して)でそれをテストしています。
プロセスについて:様々な生産者と消費者はもちろん、例えばTCPまたはSSLを介して通信、全く異なるプロセスにすることができます。