2017-08-25 45 views
0

當我使用ObjectMessage時,哪一方負責ActiveMQ中的類序列化/反序列化?誰負責ActiveMQ中的序列化/反序列化?

我假設客戶端,因爲類必須以序列化的形式發送到服務器,但是我發現我的隊列通過發送ObjectMessage'中斷':即使我收到來自該隊列的空讀取已經扭轉了我的conde變化,我發送TextMessage,如前所述。當我切換到另一個隊列時,一切正常。

它看起來像的ObjectMessage的情況下,被卡在服務器端,但我看到在日誌中沒有錯誤......這簡直是沒有任何東西可以從隊列中讀取...

+1

的答案是下面的,但我建議避免ObjectMessage除非你是相同的代碼庫的實例之間的消息傳遞。使用帶有json/xml/protobuf/whatnot的文本/字節消息可以更好地控制。 –

+0

請參閱此鏈接http://activemq.apache.org/openwire.html – Nir

回答

1

ObjectMessage使用Java序列化到信息存儲爲傳輸的協議消息中的字節有效載荷。這意味着發送者和接收者的客戶端需要在他們的類路徑中擁有這個類,以便它可以被髮送/接收。

0

我相當肯定沒有任何「常見的」ActiveMQ存儲提供者(KahaDB等)需要反序列化ObjectMessage。數據只是原始存儲。結果,只有(通常)序列化和反序列化發生在客戶端。

最近ActiveMQ的客戶端從反序列化ObjectMessage可言,作爲CVE的結果堵塞,除非它們被明確列入白名單:

-Dorg.apache.activemq.SERIALIZABLE_PACKAGES = com.acme

有一個連接工廠的API,但我有一種感覺,它沒有實現。

請注意,「*」(所有軟件包)是SERIALIZABLE_PACKAGES的合法值,但您必須小心shell /命令提示符不會意外地將其擴展爲文件名列表。

上反序列化的限制產生異常清醒所以,如果問題只是沒有消息都被消耗,沒有任何錯誤或異常,可能問題是其他地方。