Правильный способ остановить пользовательский вход в систему асинхронного приложения

Я создал приложения для входа в систему Amazon SQS и SNS, используя Amazon SDK для Java. Базовые приложения используют синхронные API-интерфейсы Java, но я также создал асинхронные версии обоих, расширивch.qos.logback.classic.AsyncAppender учебный класс.

Остановка контекста logger logback с асинхронными приложениями не работает должным образом. Когда контекст останавливается, все асинхронные приложения пытаются сбросить оставшиеся события перед выходом. Проблема возникает изch.qos.logback.core.AsyncAppenderBase#stop метод, который прерывает рабочий поток. Прерывание срабатывает, пока Amazon SDK все еще обрабатывает события в очереди и выдаетcom.amazonaws.AbortedException, В моих тестахAbortedException произошло, когда SDK обрабатывал ответ от API, поэтому фактическое сообщение прошло, но это не всегда так.

Предполагается ли, что logback прерывает рабочий поток, даже если рабочие все еще должны обрабатывать оставшуюся очередь событий? И если так, как я могу обойтиAbortedException вызвано прерыванием? Я мог бы переопределить все методы stop и удалить прерывание, но это потребовало бы копирования, вставляющего большую часть реализации.

Ответы на вопрос(1)

Ваш ответ на вопрос