Jetty AsyncProxyServlet为什么不将所有请求标记为asyncStarted?

Jetty AsyncProxyServlet为什么不将所有请求标记为asyncStarted?,proxy,jetty,jetty-9,Proxy,Jetty,Jetty 9,我的团队正在维护一个基于jetty-9 AsyncProxyServlet的API管理代理 9.4.30.v20200611 我们目前的目标是提供基于普罗米修斯指标的SLO监视器 到目前为止,我们已经使用定制的AsyncListener 下面是侦听器代码 @allargsconstuctor 类AccessLogAsyncListener实现AsyncListener{ 私人最终访问记录器访问记录器; @凌驾 公共无效完成(最终异步事件){ 日志(event.getSuppliedReques

我的团队正在维护一个基于jetty-9 AsyncProxyServlet的API管理代理

9.4.30.v20200611
我们目前的目标是提供基于普罗米修斯指标的SLO监视器

到目前为止,我们已经使用定制的
AsyncListener

下面是侦听器代码

@allargsconstuctor
类AccessLogAsyncListener实现AsyncListener{
私人最终访问记录器访问记录器;
@凌驾
公共无效完成(最终异步事件){
日志(event.getSuppliedRequest(),event.getSuppliedResponse(),ProxyRequestStatus.SUCCESS);
}
@凌驾
公共void onTimeout(最终异步事件){
日志(event.getSuppliedRequest()、event.getSuppliedResponse()、ProxyRequestStatus.TIMEOUT);
}
@凌驾
公共无效onError(最终事件){
日志(event.getSuppliedRequest(),event.getSuppliedResponse(),ProxyRequestStatus.ERROR);
}
@凌驾
公共void onStartAsync(最终AsyncEvent事件){
}
}
根据请求状态递增的专用计数器

监听器使用以下代码添加到servlet过滤器中

@覆盖
public void doFilter(最终ServletRequest请求、最终ServletResponse响应、最终FilterChain链)抛出IOException、ServletException{
链式过滤器(请求、响应);
if(request.isAsyncStarted()){
request.getAsyncContext().addListener(accessLogAsyncListener);
}否则{
日志(请求、响应、ProxyRequestStatus.UNKNOWN);
}
}
当工作负载开始达到2k req/30s左右时,我们会得到相当数量的计数器在
UNKNOWN
状态下递增(这意味着请求没有被标记为asyncStarted)。对于4k req/30s,比率约为13-15%

我的问题是:让Jetty决定何时将请求标记为异步启动的底层机制是什么

我的猜测是,在某个地方定义了一个阈值,可以触发这种行为。有人能给我们一些关于这个话题的见解吗


另外一个问题是,如果请求没有异步启动,那么推断状态的正确方法是什么(类似于在完成、错误或超时回调中所做的操作)?

没关系,我已经找到了答案

未标记为异步的请求实际上是由于合法原因(错误或缺少API密钥)而未通过筛选链的请求


通过了过滤链,所有请求都得到了有效的异步处理。

没关系,我发现了这一点

未标记为异步的请求实际上是由于合法原因(错误或缺少API密钥)而未通过筛选链的请求

通过过滤器链,所有请求都得到有效的异步处理