Простой и общий способ обработки всех асинхронных исходящих исключений Netty без вызова sync () или добавления слушателей для каждой операции? - PullRequest
0 голосов
/ 13 января 2019

В Netty мы обычно вызываем методы на Channel или ChannelHandlerContext для выполнения операций с соединением. В частности, такие методы, как write(), flush() и writeAndFlush(), используются для отправки сообщений. Однако эти методы являются асинхронными и могут вызывать исключения, если в соединении или в переданных параметрах есть ошибки. Такие исключения не обрабатываются, если только мы не вызовем sync() / get() для синхронного ожидания результата или добавим прослушиватели, используя addListener() / addListeners().

Поэтому мой вопрос: существует ли общий метод для асинхронной обработки всех таких исключений без вызова дополнительных методов, например, путем добавления общего обработчика исключений во время построения Bootstrap или инициализации Channel?

Я прочитал и попробовал этот ответ https://stackoverflow.com/a/31073723/5082913,, но обнаружил, что добавление ChannelDuplexHandler в хвосте конвейера может обрабатывать только входящие исключения.

1 Ответ

0 голосов
/ 26 января 2019

Вместо того, чтобы кодировать слушателя самостоятельно, вы должны использовать уже существующие слушатели, которые уже имеют дело с исключениями

Просто звоните .addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE) после каждого вызова записи / сброса

Исключения, сгенерированные во время отправки, теперь будут направляться в вашу функцию exceptionCaught(Throwable ex), так что вы сможете обрабатывать и записывать исключения в одном месте.

...