使用Jmeter4,Java 10 No Client ALPNProcessors导致HTTP2请求示例崩溃 - java

我无法使用Jmeter 4.0创建HTTP2请求。
我已经安装了最新的JDK和HTTP / 2协议采样器插件。

我还观察到:“penJDK8ClientALPNProcessor @ e23ec5a不适用于Java 10.0.2”
使用Java 9进行了尝试,但我得到了同样的东西。

PS:我已经尝试添加JVM_ARGS = ...

完整的堆栈跟踪为:

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:65)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.setConnection(HTTP2Request.java:247)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:121)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:107)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:490)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250)
    at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: No Client ALPNProcessors!
    at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.<init>(ALPNClientConnectionFactory.java:57)
    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
    Suppressed: java.lang.IllegalStateException: org.eclipse.jetty.alpn.java.client.OpenJDK8ClientALPNProcessor@e23ec5a not applicable for java 10.0.2
        at org.eclipse.jetty.alpn.java.client.OpenJDK8ClientALPNProcessor.init(OpenJDK8ClientALPNProcessor.java:41)
        at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.<init>(ALPNClientConnectionFactory.java:77)
        ... 8 more

参考方案

HTTP/2 Sampler的默认安装使用依赖项...

Install library: http2-client
Install library: jetty-alpn-openjdk8-client
Install library: jetty-alpn-client
Install library: http2-common
Install library: http2-hpack
Install library: jetty-io
Install library: jetty-http
Install library: jetty-util
Install plugin: bzm-http2 1.2

此依赖性列表对于Java 9+无效。

特别是,jetty-alpn-openjdk8-client依赖关系无效,不适用于Java 9+。
对于Java 9+,应改为使用jetty-alpn-java-client

历史:

早在Java 8时代,就需要支持HTTP / 2,这需要TLS的ALPN层。

Java 8没有对ALPN的官方支持,因此Jetty项目维护了JVM中核心SSL层的JVM -Xbootclasspath/p:<path-to-alpn-boot.jar>替换,以允许使用ALPN。

这是JVM本身未提供的自定义API。

https://www.eclipse.org/jetty/documentation/current/alpn-chapter.html

Jetty之外的其他项目也开始使用此API。

当Java 9网络讨论开始时,需要将ALPN支持引入到JVM本身中。

openjdk的这项工作成为ALPN的官方API。

这个新的官方API与Jav​​a 8 API不同。

简而言之,您必须为所使用的JVM使用适当的API层。

如果您需要对此的支持,请在jmeter-plugins forum上打开一个新主题(可以参考此stackoverflow答案)

您是否应该在客户端jar中提供依赖库? - java

我们为其他内部应用程序提供了一个客户端jar,以连接到我们应用程序的REST API。我们的API依赖于一些标准的Jakarta库。将这些JAR文件包含在我们的客户端jar文件中是最佳实践吗?还是只记录依赖关系,并由客户机来确保它们在类路径上有那些jar? 参考方案 您应该而不是作为超级jar捆绑到您自己的jar中,但是最好将您发行版中需要的所有jar的副本…

Java内存收集用法 - java

我试过了,最后像这样挡住了。Client client = new Client(); try { ... } catch { ... } finally { client = null; } 我想问如果发生异常,是否需要client = null清除客户端对象的内存使用。 参考方案 每当对象由于任何原因没有引用时,它就有资格进行垃圾回收,包括变量是否由于程…

Java:将文件上传到FTP问题(数据包丢失) - java

我正在尝试将文件从Java应用程序传输到FTP服务器该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了。为什么?我该如何解决?另一个问题,如果要停止文件上传,如何停止while?谢谢大家!我班上的代码:FTPClient client = new FTPClient(); InputStream…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …