我有一個系統,其中不同的服務器進程正在處理作爲來自各種客戶端的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