如何从Apache NMS ActiveMQ消息获取基础Stream句柄

时间:2015-04-30 15:22:43

标签: c# .net activemq nms apache-nms

背景
C#WPF应用程序通过ActiveMQ(Apache.NMS)/ JSON(Newtonsoft.Json)与Linux上运行的JAVA服务器交谈

问题
大于85000字节的JSON消息导致LOH碎片

可能的解决方案:
而不是将JSON读作Apache.NMS.ITextMessage(目前就是这种情况), 获取基础流句柄并使用JsonTextReader

反序列化

实施问题:
看起来Apache.NMS API不支持这种情况 有ActiveMQStreamMessage / ActiveMQBytesMessage变种 并不适合这里的账单。

我想知道是否有人在上面有任何经验?

1 个答案:

答案 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
相关问题