Korrekte Methode zum Stoppen des benutzerdefinierten asynchronen Appenders für die Rückmeldung

Ich habe Amazon SQS- und SNS-Logback-Appender mit dem Java SDK von Amazon erstellt. Die grundlegenden Appender verwenden die synchronen Java-APIs, aber ich habe auch asynchrone Versionen von beiden erstellt, indem ich das @ -Element erweiterch.qos.logback.classic.AsyncAppender Klasse.

Das Stoppen des Logback-Logger-Kontexts mit den asynchronen Appendern funktioniert jedoch nicht wie erwartet. Wenn der Kontext gestoppt ist, versuchen alle asynchronen Appender, die verbleibenden Ereignisse vor dem Beenden zu löschen. Das Problem entsteht durchch.qos.logback.core.AsyncAppenderBase#stop -Methode, die den Worker-Thread unterbricht. Der Interrupt wird ausgelöst, während das Amazon SDK die Ereignisse in der Warteschlange noch verarbeitet, und führt zu einemcom.amazonaws.AbortedException. In meinen Tests wurde dasAbortedException passierte, während das SDK eine Antwort von der API verarbeitete, sodass die eigentliche Nachricht durchlief. Dies ist jedoch möglicherweise nicht immer der Fall.

Ist beabsichtigt, dass die Rückmeldung den Worker-Thread unterbricht, obwohl die Worker die verbleibende Ereigniswarteschlange noch verarbeiten sollen? Und wenn ja, wie kann ich das @ umgeheAbortedException durch den Interrupt verursacht? Ich könnte die gesamten Stoppmethoden überschreiben und den Interrupt entfernen, aber dafür müsste die meiste Implementierung kopiert werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage