Программа Java зависает в XMLWorkerHelper.getInstance().parseXHtml

У меня сейчас в производстве возникает такая проблема, которая иногда возникает. Для контекста я использую RabbitMQ и потребитель, называемый службой электронной почты, RabbitMQ — это мой сервер обмена сообщениями, а служба электронной почты отвечает за преобразование строки HTML в PDF и отправку ее по электронной почте. Я использую этот методXMLWorkerHelper.getInstance().parseXHtml()для анализа HTML в PDF, и иногда он без ошибок зависал в журналах, из-за чего мой RabbitMQ UNACK все сообщения, которые в данный момент находятся в очереди. Пожалуйста, смотрите код ниже:

                      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                log.info( "END OF ByteArrayOutputStream" );
                Document document = new Document();
                log.info( "END OF Document" );
                PdfWriter writer = PdfWriter.getInstance(document, outputStream);
                log.info( "END OF PdfWriter" );
                document.open();
                log.info( "END OF document.open();" );
                XMLWorkerHelper.getInstance().parseXHtml(writer, document, 
                         new StringReader(fileAttachmentString)); // <--- sometimes stuck here
                log.info( "END OF XMLWorkerHelper" );
                document.close();
                log.info( "END OF document.close();" );
                byte[] bytes = outputStream.toByteArray();
                log.info( "END OF byte[] bytes = outputStream.toByteArray();" );
                DataSource dataSource = new ByteArrayDataSource(bytes, "application/pdf");
                log.info( "END OF DataSource" );
                attachmentPart.setDataHandler(new DataHandler(dataSource));
                attachmentPart.setFileName(filename);
                multipart.addBodyPart(attachmentPart);

Если это произошло, мне нужно снова перезапустить службу электронной почты, чтобы она снова обрабатывала сообщения в RabbitMQ. Я не знаю, что стало причиной того, что оно застряло там через какое-то время.

Примечание. Отправка электронной почты работает после перезапуска, но внезапно зависает из-за описанной выше проблемы.

Обновлять:

Пожалуйста, проверьте также дамп потока, я думаю, что он застрял в SocketInputStream.socketRead0, когда я проверяю внутренние журналы в дампе потока.

0 ответов

Другие вопросы по тегам