【问题标题】:Is there a way to get the origin IP address from a JMS message?有没有办法从 JMS 消息中获取源 IP 地址?
【发布时间】:2008-11-06 23:36:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: jms


    【解决方案1】:

    在 JMS 规范中提到了一个名为 JMSXUserID 的可选 JMS 标头,它标识一些 JMS 提供程序支持的发送消息的用户(代理验证并确保其正确性以避免欺骗)。

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

    【讨论】:

      【解决方案2】:

      我不这么认为。至少我没能找到方法。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 金克斯! (如果我们和其他人同时说同样的话,我们小时候所说的)
        【解决方案4】:

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

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

        【讨论】:

        • 这并不容易。你如何检测客户端IP?大多数 IP 在 Intranet 中的 NAT 后面,您只会获得像 192.168.100.1 这样的内部 IP
        • 那你可能倒霉了。 - 没有标准的方法来完成它 - 你显然无法让你的客户帮忙 + 也许你的 JMS 实现有一些功能可以做到这一点。不便携,但对你来说可能已经足够了。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          使用 glassfish,如果查看消息的 getJMSMessageID(),应该会看到一个字符串,其效果为“ID:40-192.168.0.242(f5:62:c6:58:22:6f)-52506 -122885191641”。看起来 IP 是消息 ID 的子字符串。

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

          【讨论】:

            【解决方案7】:

            简短回答:否

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-03
              • 1970-01-01
              • 1970-01-01
              • 2012-08-31
              • 1970-01-01
              • 2015-04-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多