Как получить базовый дескриптор потока из сообщения Apache NMS ActiveMQ

Предыстория:
Приложение C# WPF взаимодействует с сервером JAVA, работающим в Linux, через ActiveMQ(Apache.NMS)/JSON(Newtonsoft.Json)

Проблема:
сообщения JSON размером более 85000 байт приводят к фрагментации LOH.

Возможное решение.
Вместо того, чтобы читать JSON как Apache.NMS.ITextMessage (что в настоящее время имеет место), получите базовый дескриптор потока и выполните десериализацию с помощью JsonTextReader.

Проблемы реализации:
Похоже, что это не поддерживается Apache.NMS API, хотя существуют варианты ActiveMQStreamMessage/ActiveMQBytesMessage, которые здесь не совсем подходят.

Я хотел бы знать, есть ли у кого-нибудь опыт на выше?


person Rookie    schedule 30.04.2015    source источник


Ответы (1)


Что ж, если вы согласитесь пропустить «чистый» API-интерфейс NMS и получить доступ к классам ActiveMQ, вы можете получить дескриптор MemoryStream через общедоступное свойство Content. Хотя может быть сжатие, с которым вам нужно иметь дело.

                    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
person Petter Nordlander    schedule 02.05.2015