我有一个系统,其中不同的服务器进程正在处理作为来自各种客户端的JMS消息通过JMS代理传递的请求。有没有办法从JMS消息中获取起始IP地址?
我想确定消息的来源。有没有办法获得知识产权或有关原产地的一些识别信息?
澄清:我已经有未知用户部署客户端,所以我想避免更改消息类...
我有一个系统,其中不同的服务器进程正在处理作为来自各种客户端的JMS消息通过JMS代理传递的请求。有没有办法从JMS消息中获取起始IP地址?
我想确定消息的来源。有没有办法获得知识产权或有关原产地的一些识别信息?
澄清:我已经有未知用户部署客户端,所以我想避免更改消息类...
有一个名为JMSXUserID JMS规范,其用于识别所述用户发送消息(其代理验证并确保正确避免欺骗)其中一些JMS提供者支持提到的可选的JMS头。
我不这么认为。至少我没有找到办法。
如果您需要将回复发回给邮件的来源,您可以让发件人设置“JMSReplyTo”属性并回复该目的地。
或者,您可以稍微更改消息传递模式并嵌入源信息消息本身。发件人会在邮件中标识自己,收件人可以从该邮件中读取。
如果您可以控制要发送的消息的构造,则可以始终将IP地址作为属性添加到消息中。然后您可以在Message上使用getStringProperty方法检查值。
如果您控制发送消息的客户端的代码,您可以创建一些属性名称,如“IPOfSender”,并使用Message.setStringProperty()在每条消息中包含该属性。
// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
它取决于您的JMS服务器。某些服务器具有Admin工具/ API,可让您查看连接详细信息。
使用的是GlassFish,如果你看一下getJMSMessageID()的消息,你应该会看到一个字符串的“ID效果:40-192.168.0.242(F5:62: C6:58:22:1207)-52506-122885191641" 。它看起来好像IP是消息ID的子字符串。
请注意,这是我可以在我们的设置下看到的,所以可能还有其他因素在起作用(即弹簧),但我知道字符串不是由我们以编程方式创建的。
简短回答:否
Jinks! (如果我们与其他人同时说同一件事,我们说孩提时代) – 2008-11-07 03:53:18
哈哈,你欠我一杯可乐:)。 – fawce 2008-11-09 23:55:58