【发布时间】:2008-11-06 23:36:33
【问题描述】:
我有一个系统,其中不同的服务器进程正在处理通过 JMS 代理从各种客户端作为 JMS 消息传递的请求。
我正在尝试确定消息的来源。有没有办法获取 IP 或一些关于来源的识别信息?
澄清:我已经有未知用户部署的客户端,所以我试图避免更改消息类...
【问题讨论】:
标签: jms
我有一个系统,其中不同的服务器进程正在处理通过 JMS 代理从各种客户端作为 JMS 消息传递的请求。
我正在尝试确定消息的来源。有没有办法获取 IP 或一些关于来源的识别信息?
澄清:我已经有未知用户部署的客户端,所以我试图避免更改消息类...
【问题讨论】:
标签: jms
在 JMS 规范中提到了一个名为 JMSXUserID 的可选 JMS 标头,它标识一些 JMS 提供程序支持的发送消息的用户(代理验证并确保其正确性以避免欺骗)。
【讨论】:
我不这么认为。至少我没能找到方法。
如果您需要将回复发送回消息的来源,您可以让发件人设置“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 的子字符串。
请注意,这是我在我们的设置下可以看到的,因此可能还有其他因素在起作用(例如弹簧),但我知道该字符串不是由我们以编程方式创建的。
【讨论】:
简短回答:否
【讨论】: