You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Jetty 11迁移至Jetty 12:StatisticsHandler缺失方法咨询

Jetty 11 → 12迁移:StatisticsHandler缺失方法的原因与替代方案

1. 缺失方法被移除的原因

Jetty 12对核心Handler架构和统计模型做了大幅重构,核心目标是统一请求处理流程、简化API并适配Servlet 6.0规范。你提到的getDispatched*、getAsync*等方法被移除,主要原因有两点:

  • 统计模型的整合与简化:Jetty 10/11的StatisticsHandler暴露的内部统计项过于零散,部分指标的定义和Jetty 12新的请求生命周期模型不匹配。比如原Dispatched系列指标针对旧的线程调度模型设计,而Jetty 12采用了更通用的任务执行框架,这类细分指标的语义已不再清晰。
  • 异步请求处理的架构调整:Jetty 12重新设计了异步请求的管理逻辑,原AsyncRequests系列指标的统计维度被整合到更通用的请求状态统计中,旧方法的存在会破坏新API的一致性。

虽然Issue #10555提到要重新引入完整统计集,但目前官方优先保证核心架构的稳定性,部分缺失方法的恢复被延后。

2. 替代方案

针对你依赖Prometheus JettyStatisticsCollector的场景,可采用以下方案:

方案一:自定义统计逻辑适配Jetty 12

  1. 补充异步请求统计:通过注册AsyncListener或ServletRequestListener,在异步请求的创建、等待、完成等阶段手动统计getAsyncRequests、getAsyncDispatches等指标。
  2. 恢复响应字节统计:实现自定义的HttpServletResponseWrapper,在write方法中累加响应字节数,替代getResponsesBytesTotal。
  3. 重构Dispatched相关指标:利用Jetty 12 StatisticsHandler提供的getRequestsActive()、getRequestsTotal()等基础方法,结合线程池统计(QueuedThreadPool的getQueueSize、getActiveThreads)推导近似的Dispatched系列指标。

方案二:扩展StatisticsHandler自行实现缺失方法

继承Jetty 12的StatisticsHandler,通过访问其内部的Statistics实例(需注意Jetty内部API的兼容性),自行实现缺失的统计方法。例如:

public class ExtendedStatisticsHandler extends StatisticsHandler {
    public long getDispatched() {
        return getStatistics().getRequestsTotal();
    }
    
    // 其他缺失方法的实现,根据内部统计数据推导或补充
}

之后将你的Web应用使用的Handler替换为这个扩展类,保持原有Prometheus Collector的代码逻辑不变。

方案三:修改Prometheus Collector适配Jetty 12

由于io.prometheus:simpleclient_jetty已停止维护,可自行fork该项目或复制JettyStatisticsCollector代码,将其中依赖旧方法的逻辑替换为Jetty 12的可用API或自定义统计逻辑。例如用getRequestsActive()替代getDispatchedActive,用自定义的响应字节统计替代getResponsesBytesTotal。

方案四:等待官方更新

虽然目前client_java尚未迁移JettyStatisticsCollector,但Jetty官方后续版本大概率会恢复部分核心统计方法(参考Issue #10555的规划),可关注Jetty和Prometheus Client Java的版本更新。

内容的提问来源于stack exchange,提问作者Lesiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:20:02