質問
異なるサーバープロセスが、JMSブローカー経由でさまざまなクライアントからJMSメッセージとして渡されたリクエストを処理するシステムがあります。
メッセージのソースを特定しようとしています。 IPまたは発信元に関する特定の情報を取得する方法はありますか?
明確化:未知のユーザーが既にクライアントを展開しているため、メッセージクラスの変更を避けようとしています...
解決
JMS仕様には、 JMSXUserID と呼ばれるオプションのJMSヘッダーがあります。これは、一部のJMSプロバイダーがサポートするメッセージ(ブローカーが検証し、なりすましを防ぐために正しいことを確認する)を送信するユーザーを識別します。
たとえば、 Apache ActiveMQで有効にする方法
他のヒント
私はそうは思わない。少なくとも、方法を見つけることができませんでした。
メッセージのソースに返信を送信する必要がある場合、送信者に" JMSReplyTo"を設定させることができます。プロパティとその宛先に返信します。
または、メッセージングスキーマをわずかに変更して、ソース情報メッセージ自体を埋め込むこともできます。送信者はメッセージ内で自分自身を識別し、受信者はそこから読み取ることができます。
送信されるメッセージの構成を制御できる場合、IPアドレスをプロパティとしてメッセージにいつでも追加できます。次に、 MessageのgetStringProperty メソッド。
メッセージを送信するクライアントのコードを制御する場合、" IPOfSender"などのプロパティ名を考案し、Message.setStringProperty()ですべてのメッセージにそのプロパティを含めることができます。
// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
JMSサーバーに依存します。一部のサーバーには、接続の詳細を表示できる管理ツール/ APIがあります。
glassfishを使用して、メッセージのgetJMSMessageID()を見ると、" ID:40-192.168.0.242(f5:62:c6:58:22:6f)-の効果を示す文字列が表示されるはずです。 52506-122885191641」。 IPはメッセージIDのサブストリングのように見えます。
これは私たちのセットアップで見ることができるので、プレイには他の要因(つまり、春)があるかもしれないことに注意してください。
簡単な答え:いいえ