解決Ice.MessageSizeMax限制異常

今天同事老薑在使用ICE的時候,遇到個異常,報告“衝突Ice.MessageSizeMax限制”異常。這個異常到底是怎麼回事呢? 

  編譯腳本  :http://zhaoningbo.iteye.com/admin/blogs/1135564(依賴Ice環境) 
  追究存在性:http://doc.zeroc.com/pages/viewpage.action?pageId=3900811 

正文: 

  首先不得不讚美一下Zeroc Ice異常機制的人性化,很多時候直接報到“根源”(當然,遇上報Endpoint, socket, pipe糾結是必須的)。 

  解決方法,根據大宗使用手法可分以下幾類: 

  1,基於IceGrid-IceBox/IceGrid部署 

    果斷兩大手法: 
    (1)給“registry_node.config”(ICE註冊及結點配置文件,忘名知意;-D)添加“Ice.MessageSizeMax”值爲更合適的整數(不帶單位,默認1024,即1024K)。 
    (2)IceGridGUI.jar跑起來,在界面給相應的“Server”添加一個“Ice.MessageSizeMax”屬性及值。犀利些的,直接去“application.xml”玩吧。 

  2,基於Ice.Application的javac/java命令行 

    手法千千萬,關注一個點: 
    (1)Ice.Application.main(String appName, String[] args, T),在T上做文章。 
    然後,愛傳配置文件的隨便建個名字不跟“Ice命名犯衝”的名稱,在T處放個文件路徑;愛命令行思路的,直接丟個“Ice.MessageSizeMax=NNN”。愛傳對象的,整個“Ice.InitializationData”…… 
    這裏不寫樣例是因爲Ice.Application.main(...)的一組方法有說明。 

  3,基於&*(^**,基於手寫(編寫測試圖方便可能用到;-d) 

    先上樣例代碼 
Java代碼  收藏代碼
  1. // 加載屬性文件  
  2. Ice.Properties beforeProperties = Ice.Util.createProperties();  
  3. beforeProperties.setProperty("Ice.MessageSizeMax""10240");  
  4. Ice.InitializationData initData = new Ice.InitializationData();  
  5. initData.properties = beforeProperties;  
  6. System.out.println(beforeProperties.getProperty("Ice.MessageSizeMax"));  
  7. // 1, 初始化環境  
  8. Ice.Communicator ic = Ice.Util.initialize(initData);  
  9. Ice.Properties afterProperties = ic.getProperties();  
  10. System.out.println(afterProperties.getProperty("Ice.MessageSizeMax"));  
  11.   
  12. // 2, 初始化Adapter  

    其中: 
      L2:beforeProperties,創建一個空的配置文件 
      L9:afterProperties,從生成的通訊員拿回的配置信息 
    意圖就在驗證設置是否生效。驗證效果如下 
Java代碼  收藏代碼
  1. 10240  
  2. 10240  
  3. <<HelloUID started>>  

    成功了。 

    最後特別要強調的是:如果在服務方Ice.Communicator設置了“Ice.MessageSizeMax”,請務必在客戶方也設置。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章