2

C++ コンポーネントと Java コンポーネントの間で 2 つのプロセスで通信するメッセージ ブローカーとして ActiveMQ を使用したいと考えています。例えば。C++ コンポーネントがパブリッシャーで、Java コンポーネントがサブスクライバーです (複数のサブスクライバーが存在する場合もあります)。ActiveMQ Web サイトを見ると、ツール OpenWire と ActiveMQ-CPP について言及されています。ただし、Web サイトのすべての例では、生産者と消費者の両方に同じ言語を使用しています。

私の質問は次のとおりです。

1.ActiveMQ は異なる言語のプロデューサー/コンシューマーに対して機能しますか?

2.異なるプロセスで?どのように?

4

2 に答える 2

2

OpenWire はプロトコルであるため、理論的にはどこにでも実装できますが、すべての言語に完全な実装が存在するわけではありません。C++ クライアントの細字には次のように書かれています。

「バージョン 2.0 の時点で、ActiveMQ-CPP は OpenWire v2 プロトコルをサポートしていますが、いくつかの例外があります。ObjectMessage - ObjectMessage に含まれるオブジェクトを C++ で再構築することはできません。 ObjectMessage が送信された場合、メッセージは受信されますが、そこからオブジェクトを抽出することはできません。」

したがって、プロセス間でデータを送信する場合は、API を使用するように C++ および Java コンポーネントを記述します (ActiveMQ-CPP を使用している場合は ObjectMessage 型を使用しないようにしてください)。次に、ActiveMQ サーバーを実行します...プログラムに接続するように指示すると、動作するはずです。

しかし、両方のクライアントを制御しているときにプロセス間通信を実行しようとしているだけの場合、これは少し手間がかかる可能性があります。Java と C++ の間の IPC の最適なアプローチは何ですか?への回答に興味があるかもしれません。Linux 上の Java/C++ アプリの共有メモリ IPC の優れた代替手段

于 2010-01-22T19:20:08.230 に答える
0

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 (Stomp を使用) と Java (OpenWire を使用) でテストしました。

プロセスに関して : もちろん、さまざまなプロデューサーとコンシューマーが、TCP や SSL などを介して通信するまったく異なるプロセスに存在する可能性があります。

于 2010-01-29T14:53:17.653 に答える