Есть ли способ получить исходный IP-адрес из сообщения JMS? - PullRequest
6 голосов
/ 07 ноября 2008

У меня есть система, в которой разные серверные процессы обрабатывают запросы, передаваемые как сообщения JMS от различных клиентов через JMS-брокер.

Я пытаюсь определить источник сообщений. Есть ли способ получить IP или некоторую идентифицирующую информацию о происхождении?

Уточнение: у меня уже есть клиент, развернутый неизвестными пользователями, поэтому я пытаюсь избежать изменения классов сообщений ...

Ответы [ 7 ]

3 голосов
/ 10 ноября 2008

В спецификации JMS упоминается необязательный заголовок JMS, называемый JMSXUserID , который идентифицирует пользователя, отправляющего сообщение (который брокер проверяет и обеспечивает правильность, чтобы избежать подделки), который поддерживают некоторые провайдеры JMS.

Например, вот как включить его в Apache ActiveMQ

1 голос
/ 07 ноября 2008

Я так не считаю. По крайней мере, я не смог найти способ.

Если вам нужно отправить ответ обратно источнику сообщения, вы можете попросить отправителя установить свойство «JMSReplyTo» и ответить обратно этому месту назначения.

Или вы можете немного изменить свою схему обмена сообщениями и встроить собственное информационное сообщение. Отправитель идентифицирует себя в сообщении, а получатель может прочитать его оттуда.

0 голосов
/ 02 января 2009

Краткий ответ: НЕТ

0 голосов
/ 10 декабря 2008

Используя glassfish, если вы посмотрите на getJMSMessageID () сообщения, вы должны увидеть строку с эффектом "ID: 40-192.168.0.242 (f5: 62: c6: 58: 22: 6f) -52506 -122885191641" . Похоже, что IP является подстрокой идентификатора сообщения.

Обратите внимание, что это то, что я вижу в нашей настройке, поэтому могут быть и другие факторы (например, пружина), но я знаю, что строка была создана не нами программно.

0 голосов
/ 07 ноября 2008

Это зависит от вашего сервера JMS. Некоторые серверы имеют инструменты администратора / API, которые позволяют вам просматривать детали подключения.

0 голосов
/ 07 ноября 2008

Если вы управляете кодом клиентов, отправляющих сообщения, вы можете придумать какое-нибудь имя свойства, скажем «IPOfSender», и включить это свойство в каждое сообщение с помощью Message.setStringProperty ().

// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
0 голосов
/ 07 ноября 2008

Если у вас есть контроль над созданием отправляемых сообщений, вы всегда можете добавить IP-адрес к сообщению в качестве свойства. Затем вы можете проверить значение с помощью метода getStringProperty в сообщении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...