首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Jetty AsyncProxyServlet不将所有请求标记为asyncStarted?

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

Stack Overflow用户
提问于 2020-09-28 20:48:00
回答 1查看 65关注 0票数 1

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

代码语言:javascript
复制
<jetty.version>9.4.30.v20200611</jetty.version>

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

到目前为止,我们已经使用自定义AsyncListener实现了我们的计数器

以下是监听器代码

代码语言:javascript
复制
@AllArgsConstructor
class AccessLogAsyncListener implements AsyncListener {

    private final AccessLogger accessLogger;

    @Override
    public void onComplete(final AsyncEvent event) {
        accessLogger.log(event.getSuppliedRequest(), event.getSuppliedResponse(), ProxyRequestStatus.SUCCESS);
    }

    @Override
    public void onTimeout(final AsyncEvent event) {
        accessLogger.log(event.getSuppliedRequest(), event.getSuppliedResponse(), ProxyRequestStatus.TIMEOUT);
    }

    @Override
    public void onError(final AsyncEvent event) {
        accessLogger.log(event.getSuppliedRequest(), event.getSuppliedResponse(), ProxyRequestStatus.ERROR);
    }

    @Override
    public void onStartAsync(final AsyncEvent event) {
    }

}

基于请求状态递增的专用计数器

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

代码语言:javascript
复制
    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
        if (request.isAsyncStarted()) {
            request.getAsyncContext().addListener(accessLogAsyncListener);
        } else {
            accessLogger.log(request, response, ProxyRequestStatus.UNKNOWN);
        }
    }

当工作负载开始达到大约2k req / 30s时,我们会得到相当多的UNKNOWN状态的计数器递增(这意味着请求没有被标记为asyncStarted)。对于4k请求/ 30s,这一比率约为13-15%。

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

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

作为一个附加问题,如果请求尚未异步启动,推断状态的正确方法是什么(类似于在complete、error或timeout回调中所做的操作)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 20:54:13

不要紧,我想通了。

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

通过过滤器链,所有请求都被有效地异步处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64102504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档