2015-04-30 73 views
3

背景:
C#WPF應用程序交談JAVA服務器通過ActiveMQ的(Apache.NMS)運行在Linux上/ JSON(Newtonsoft.Json)如何從Apache ActiveMQ的NMS得到消息底層流手柄

問題
JSON消息大於85000個字節時導致LOH碎片

可能的解決方案:
代替讀取第ËJSON作爲Apache.NMS.ITextMessage(這是目前的情況下), 獲得底層的流處理和使用JsonTextReader

執行問題反序列化:
這樣看來,這不是由Apache.NMS支持API雖然 有ActiveMQStreamMessage/ActiveMQBytesMessage變種, 並不真正適合這裏的法案。

我想知道是否有人在上面有任何經驗?

回答

0

那麼,如果您同意跳過「純」NMS API並訪問ActiveMQ類,則可以通過公共Content屬性獲取MemoryStream的句柄。雖然可能需要處理壓縮。

    ITextMessage msg = consumer.Receive() as ITextMessage; 
        ActiveMQTextMessage tmsg = msg as ActiveMQTextMessage; 
        Stream stream = new MemoryStream(tmsg.Content); 

        if(tmsg.Compressed == true) 
        { 
         stream = tmsg.Connection.CompressionPolicy.CreateDecompressionStream(stream);        
        } 

        // TODO read MemoryStream to whatever