2008-11-06 66 views
6

我有一个系统,其中不同的服务器进程正在处理作为来自各种客户端的JMS消息通过JMS代理传递的请求。有没有办法从JMS消息中获取起始IP地址?

我想确定消息的来源。有没有办法获得知识产权或有关原产地的一些识别信息?

澄清:我已经有未知用户部署客户端,所以我想避免更改消息类...

回答

3

有一个名为JMSXUserID JMS规范,其用于识别所述用户发送消息(其代理验证并确保正确避免欺骗)其中一些JMS提供者支持提到的可选的JMS头。

例如这里是how to enable it in Apache ActiveMQ

1

我不这么认为。至少我没有找到办法。

如果您需要将回复发回给邮件的来源,您可以让发件人设置“JMSReplyTo”属性并回复该目的地。

或者,您可以稍微更改消息传递模式并嵌入源信息消息本身。发件人会在邮件中标识自己,收件人可以从该邮件中读取。

0

如果您可以控制要发送的消息的构造,则可以始终将IP地址作为属性添加到消息中。然后您可以在Message上使用getStringProperty方法检查值。

+0

Jinks! (如果我们与其他人同时说同一件事,我们说孩提时代) – 2008-11-07 03:53:18

+0

哈哈,你欠我一杯可乐:)。 – fawce 2008-11-09 23:55:58

0

如果您控制发送消息的客户端的代码,您可以创建一些属性名称,如“IPOfSender”,并使用Message.setStringProperty()在每条消息中包含该属性。

// client code 
String myIPString = ...; 
Message m = session.createTextMessage(); 
m.setStringProperty("IPOfSender", myIPString); 
... 
0

它取决于您的JMS服务器。某些服务器具有Admin工具/ API,可让您查看连接详细信息。

0

使用的是GlassFish,如果你看一下getJMSMessageID()的消息,你应该会看到一个字符串的“ID效果:40-192.168.0.242(F5:62: C6:58:22:1207)-52506-122885191641" 。它看起来好像IP是消息ID的子字符串。

请注意,这是我可以在我们的设置下看到的,所以可能还有其他因素在起作用(即弹簧),但我知道字符串不是由我们以编程方式创建的。

相关问题