Чтение большого файла сообщений (* .msg), застрявшего в HornetQ

#jboss #hornetq

#jboss #hornetq

Вопрос:

Я работаю над приложением, в котором много асинхронных сообщений, размещенных в HornetQ 2.3.21. В результате какого-то процесса размер моего сообщения превышает 2 ГБ, и сообщение начинает завершаться ошибкой с этим сообщением на сервере:

 HQ212017: error adding packet: java.lang.IllegalStateException: Maximum size of 2gb exceeded
   at org.jboss.netty.buffer.DynamicChannelBuffer.ensureWritableBytes(DynamicChannelBuffer.java:82) [netty-3.6.9.Final-redhat-1.jar:3.6.9.Final-redhat-1]
   at org.jboss.netty.buffer.DynamicChannelBuffer.writeByte(DynamicChannelBuffer.java:205) [netty-3.6.9.Final-redhat-1.jar:3.6.9.Final-redhat-1]
   at org.hornetq.core.buffers.impl.ChannelBufferWrapper.writeByte(ChannelBufferWrapper.java:539) [hornetq-commons-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.buffers.impl.ResetLimitWrappedHornetQBuffer.writeByte(ResetLimitWrappedHornetQBuffer.java:249) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.client.impl.ClientLargeMessageImpl$HornetQOutputStream.write(ClientLargeMessageImpl.java:205) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at java.io.OutputStream.write(OutputStream.java:116) [rt.jar:1.8.0_251]
   at org.hornetq.utils.InflaterWriter.doWrite(InflaterWriter.java:106) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.utils.InflaterWriter.write(InflaterWriter.java:63) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at java.io.OutputStream.write(OutputStream.java:116) [rt.jar:1.8.0_251]
   at java.io.OutputStream.write(OutputStream.java:75) [rt.jar:1.8.0_251]
   at org.hornetq.core.client.impl.LargeMessageControllerImpl.addPacket(LargeMessageControllerImpl.java:185) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.client.impl.ClientConsumerImpl.handleLargeMessageContinuation(ClientConsumerImpl.java:748) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.client.impl.ClientSessionImpl.handleReceiveContinuation(ClientSessionImpl.java:935) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.client.impl.ClientSessionPacketHandler.handlePacket(ClientSessionPacketHandler.java:65) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:641) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:557) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:533) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1693) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:165) [hornetq-server-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:105) [hornetq-core-client-2.3.21.Final-redhat-1.jar:2.3.21.Final-redhat-1]
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [rt.jar:1.8.0_251] 
  

Это сообщение хранится в файловой системе в messaginglargemessages папке.

Я хочу прочитать сообщение, чтобы увидеть, какой процесс вызывает проблему, но сообщение закодировано в двоичном формате. Как я могу прочитать этот файл? Я попробовал некоторые доступные в Интернете утилиты для преобразования .msg файлов, также изменил кодировку, также попытался отправить это сообщение в код, который считывает двоичные файлы, но безуспешно. Я не уверен, что содержимое сообщения будет доступно для чтения человеком или нет. Нам нужно получить имя модуля, которое должно быть частью этого сообщения. Как только мы получим имя модуля, мы можем найти другие решения для ошибки 2GB.

Операционная система — Windows, но мы видим те же сообщения и проблемы и в Linux.

Комментарии:

1. У меня есть файл .msg, который не читается. Я хочу сделать его читаемым. Можете ли вы предложить какой-либо способ, с помощью которого я могу прочитать этот файл .msg, чтобы я знал, какой запрос вызывает эту проблему.

2. да, его невозможно прочитать. Это сообщение находится в папке «messaginglargemessages», это сообщение вызывается как журнал сообщений. Операционная система — Windows, но мы видим те же сообщения и проблемы и в Linux.

3. Его не читается человеком. Я перепробовал все простые способы расшифровки сообщения, но безуспешно.

4. Версия Horntq — hornetq-2.3.21. Я получаю сообщение о превышении максимального размера на сервере. Я попробовал некоторые утилиты, доступные в Интернете, для преобразования файлов .msg, также изменил кодировку, также попытался отправить это сообщение в код, который считывает двоичные файлы, но безуспешно.

5. Это похоже на внутреннюю проблему между брокером и Netty. Я бы рекомендовал перейти на ActiveMQ Artemis.