jmeter - Java 12 JMeter 5 HTTP/2 请求 java.lang.NoClassDefFoundError: org/eclipse/jetty/alpn/client/ALPNClientConnectionFactory
问题描述
我在 Ubuntu 9.0.4 上使用 Java 12、JMeter 5.1.1 并在尝试发送 HTTP/2 请求时遇到以下异常:
Response code: Non HTTP response code: java.util.concurrent.ExecutionException
Response message: Non HTTP response message: java.lang.IllegalStateException: No Client ALPNProcessors!
响应正文中的堆栈跟踪:
java.util.concurrent.ExecutionException: java.lang.IllegalStateException: No Client ALPNProcessors!
at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:138)
at com.blazemeter.jmeter.http2.sampler.HTTP2Connection.connect(HTTP2Connection.java:68)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.setConnection(HTTP2Request.java:278)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:138)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:115)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.IllegalStateException: No Client ALPNProcessors!
at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.<init>(ALPNClientConnectionFactory.java:54)
at org.eclipse.jetty.http2.client.HTTP2Client.lambda$doStart$1(HTTP2Client.java:155)
at org.eclipse.jetty.http2.client.HTTP2Client$ClientSelectorManager.newConnection(HTTP2Client.java:438)
at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:222)
at org.eclipse.jetty.io.ManagedSelector.access$1500(ManagedSelector.java:60)
at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:825)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:754)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:672)
... 1 more
JMeter 5.1.1jetty-alpn-client-9.4.9.v20180320.jar
默认自带。
然后我从http://central.maven.org/maven2/org/eclipse/jetty/jetty-alpn-java-client/下载 jetty alpn java 客户端库,并将其放入 jmeter 安装的 lib/ 文件夹并导致此异常:
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: org/eclipse/jetty/alpn/client/ALPNClientConnectionFactory
at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:138)
at com.blazemeter.jmeter.http2.sampler.HTTP2Connection.connect(HTTP2Connection.java:68)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.setConnection(HTTP2Request.java:278)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:138)
at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:115)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/alpn/client/ALPNClientConnectionFactory
at org.eclipse.jetty.http2.client.HTTP2Client.lambda$doStart$1(HTTP2Client.java:155)
at org.eclipse.jetty.http2.client.HTTP2Client$ClientSelectorManager.newConnection(HTTP2Client.java:438)
at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:222)
at org.eclipse.jetty.io.ManagedSelector.access$1500(ManagedSelector.java:60)
at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:825)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:754)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:672)
... 1 more
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:436)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 8 more
我切换到 Java 11 但得到了同样的错误。任何建议和见解都值得赞赏。
解决方案
No Client ALPNProcessors!
是来自处理 ALPN 的 Jetty 库的消息。
因为你是在 JDK 12 中运行的(而且我认为与 JDK 11 没有什么大的区别,所以 JDK 12 应该没问题),你必须jetty-alpn-java-client
在 classpath 中有 jar,这样 Jetty 库才会找到一个实现如错误所示,找不到的ALPNProcessor.Client
类(通过机制)。ServiceLoader
你没有详细说明你是如何设置 TLS 等的,我本来希望 JMeter 已经jetty-alpn-java-client
在类路径中拥有 jar,但显然你的设置(或 JMeter 的)有问题。
我会仔细检查 JMeter 如何配置 TLS;如果它使用标准的 JDK 实现,那么它必须jetty-alpn-java-client
在类路径中有 jar。
如果 JMeter 正在使用其他 TLS 实现(例如 Conscrypt),那么 Jetty 项目提供类似的库(例如jetty-alpn-conscrypt-client
jar),它们同样应该在类路径中。
推荐阅读
- javascript - 在 JavaScript 中,如何检查数组是否具有重复的多个值?
- javascript - 如何为在打字稿中创建嵌套元素结构的函数创建接口?
- flutter - Flutter setstate() 不适用于 sleep()
- testing - 电子商务网站折扣的负面情况?
- swift - 快速蒸汽路线错误 - 类型没有成员“保存”
- python - 递归正则表达式模式 - 在python中
- node.js - 使用 Socket.io [Express, Socket.io, Sequelize] 发出 Sequelize 结果时出错
- python - Python将包含列表元组的字符串解包到变量
- traefik - Traefik 2 中间件正在处理 https,但不是 http 入口点
- azure - 编排客户端功能可靠吗?