3

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

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

可能的解决方案:
不是将 JSON 读取为 Apache.NMS.ITextMessage(目前就是这种情况),而是使用 JsonTextReader 获取底层流句柄并反序列化

实施问题:
Apache.NMS API 似乎不支持此功能,尽管 ActiveMQStreamMessage/ActiveMQBytesMessage 变体在这里并不真正符合要求。

我想知道有没有人有以上的经验?

4

1 回答 1

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
于 2015-05-02T07:43:59.967 回答