有时候需要知道拦截Guice中方法调用的方法拦截器的顺序.一个简单的示例场景是使用guice-persist提供的@Transactional方法拦截器和自定义的@Retry方法拦截器.重试拦截器必须在事务拦截器之外运行,以确保重试不在同一事务中执行.
在Spring中,您可以使用拦截器的Ordered接口来确保在重试拦截器中执行事务拦截器.有没有办法在Guice中实现同样的目标?
我使用亚马逊的Java SDK创建了Amazon SQS和SNS logback appender.基本的appender使用同步Java API,但我也通过扩展ch.qos.logback.classic.AsyncAppender类创建了两者的异步版本.
使用异步appender停止logback记录器上下文不会按预期工作.当上下文停止时,所有异步appender都会在退出之前尝试刷新剩余事件.问题源于ch.qos.logback.core.AsyncAppenderBase#stop方法,它会中断工作线程.当Amazon SDK仍在处理排队事件并产生结果时触发中断com.amazonaws.AbortedException.在我的测试中,AbortedException当SDK处理来自API的响应时发生了这样的事情,因此实际的消息经历了,但情况可能并非总是如此.
即使工作者仍应处理剩余的事件队列,是否打算使用logback中断工作线程?如果是这样,我怎样才能解决AbortedException由中断引起的问题?我可以覆盖整个停止方法并删除中断,但这需要复制粘贴大部分实现.