我在Spring Cloud Gateway中编写了一个全局过滤器,该过滤器创建了一个资源,该资源应供所有后续过滤器使用(即,OpenCensus范围,但这在这里并不重要),并且应在写入响应后关闭。
文档中提到了包括pre
和post
部分在内的全局过滤器,但我认为,如果在正常请求处理过程中(即在运行“ pre ”,但在“发布”部分之前。
这是我的摘录:
@Bean
@Order(0)
public GlobalFilter createSpan() {
return (exchange, chain) -> {
/* PRE */
SomethingCloseable resource = Factory.createResource();
exchange.getAttributes().put(THE_RESOURCE, resource);
return chain.filter(exchange).then(Mono.fromRunnable(/* POST */ resource::close));
};
}
用OpenCensus术语来说,跨度总是包裹在文档的try/catch/finally
中,而close
调用总是在finally
块中执行。
因此,这是一个实际的问题:如果在请求处理过程中发生未处理的异常,例如,将执行Closeable#close
调用。在其他过滤器中?