6

我有一个系统,其中不同的服务器进程正在处理通过 JMS 代理从各种客户端作为 JMS 消息传递的请求。

我正在尝试确定消息的来源。有没有办法获取 IP 或一些关于来源的识别信息?

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

4

7 回答 7

3

There is an optional JMS header mentioned in the JMS specification called JMSXUserID which which identifies the user sending a message (which the broker validates and ensures is correct to avoid spoofing) which some JMS providers support.

For example here is how to enable it in Apache ActiveMQ

于 2008-11-10T10:55:33.130 回答
1

我不相信。至少我找不到方法。

如果您需要将回复发送回消息源,您可以让发送方设置“JMSReplyTo”属性并回复回该目的地。

或者,您可以稍微更改您的消息传递模式并嵌入源信息消息本身。发送者将在消息中表明自己的身份,而接收者可以从那里读取它。

于 2008-11-07T01:18:38.957 回答
0

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

于 2008-11-07T03:51:32.190 回答
0

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

// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
于 2008-11-07T03:51:55.557 回答
0

它取决于您的 JMS 服务器。某些服务器具有允许您查看连接详细信息的管理工具/API。

于 2008-11-07T04:52:44.453 回答
0

Using glassfish, if you look at the getJMSMessageID() of the message, you should see a string to the effect of "ID:40-192.168.0.242(f5:62:c6:58:22:6f)-52506-122885191641". It appears as though the IP is a substring of the message id.

Please note that this is what I can see under our setup, so there may be other factors at play (ie. spring), but I know that string wasn't created by us programatically.

于 2008-12-09T21:19:32.227 回答
-1

Short answer: NO

于 2009-01-02T16:06:08.463 回答