2008-11-06 68 views
6

我有一個系統,其中不同的服務器進程正在處理作爲來自各種客戶端的JMS消息通過JMS代理傳遞的請求。有沒有辦法從JMS消息中獲取起始IP地址?

我想確定消息的來源。有沒有辦法獲得知識產權或有關原產地的一些識別信息?

澄清:我已經有未知用戶部署客戶端,所以我想避免更改消息類...

回答

3

有一個名爲JMSXUserID JMS規範,其用於識別所述用戶發送消息(其代理驗證並確保正確避免欺騙)其中一些JMS提供者支持提到的可選的JMS頭。

例如這裏是how to enable it in Apache ActiveMQ

1

我不這麼認爲。至少我沒有找到辦法。

如果您需要將回復發回給郵件的來源,您可以讓發件人設置「JMSReplyTo」屬性並回復該目的地。

或者,您可以稍微更改消息傳遞模式並嵌入源信息消息本身。發件人會在郵件中標識自己,收件人可以從該郵件中讀取。

0

如果您可以控制要發送的消息的構造,則可以始終將IP地址作爲屬性添加到消息中。然後您可以在Message上使用getStringProperty方法檢查值。

+0

Jinks! (如果我們與其他人同時說同一件事,我們說孩提時代) – 2008-11-07 03:53:18

+0

哈哈,你欠我一杯可樂:)。 – fawce 2008-11-09 23:55:58

0

如果您控制發送消息的客戶端的代碼,您可以創建一些屬性名稱,如「IPOfSender」,並使用Message.setStringProperty()在每條消息中包含該屬性。

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

它取決於您的JMS服務器。某些服務器具有Admin工具/ API,可讓您查看連接詳細信息。

0

使用的是GlassFish,如果你看一下getJMSMessageID()的消息,你應該會看到一個字符串的「ID效果:40-192.168.0.242(F5:62: C6:58:22:1207)-52506-122885191641" 。它看起來好像IP是消息ID的子字符串。

請注意,這是我可以在我們的設置下看到的,所以可能還有其他因素在起作用(即彈簧),但我知道字符串不是由我們以編程方式創建的。

相關問題