背景
C#WPF应用程序通过ActiveMQ(Apache.NMS)/ JSON(Newtonsoft.Json)与Linux上运行的JAVA服务器交谈
问题:
大于85000字节的JSON消息导致LOH碎片
可能的解决方案:
而不是将JSON读作Apache.NMS.ITextMessage(目前就是这种情况),
获取基础流句柄并使用JsonTextReader
实施问题:
看起来Apache.NMS API不支持这种情况
有ActiveMQStreamMessage / ActiveMQBytesMessage变种
并不适合这里的账单。
我想知道是否有人在上面有任何经验?
答案 0 :(得分: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