簡體   English   中英

Jmeter4、Java 10 No Client ALPNProcessors 導致 HTTP2 請求示例崩潰

[英]HTTP2 request sample crashes with Jmeter4, Java 10 No Client ALPNProcessors

我無法使用 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,這需要 ALPN 層來實現 TLS。

Java 8 沒有官方支持 ALPN,因此 Jetty 項目維護了一個 JVM -Xbootclasspath/p:<path-to-alpn-boot.jar>替換 JVM 中的核心 SSL 層,以允許使用 ALPN。

這是 JVM 本身不提供的自定義 API。

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

Jetty 之外的其他項目也開始使用這個 API。

當 Java 9 網絡討論開始時,需要將 ALPN 支持融入 JVM 本身。

openjdk 的這一努力成為了 ALPN 的官方 API。

這個新的官方 API 與 Java 8 API 不同。

簡而言之,您必須為您正在使用的 JVM 使用適當的 API 層。

如果您需要對此的支持,請在jmeter-plugins 論壇上打開一個新主題(請隨意參考此 stackoverflow 答案)

調查

pen JDK8 ClientALPNProcessor

我的期望是您必須使用Java 8 SE才能使插件正常工作。

參考:

使用碼頭 9.4.19.v20190610:

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-java-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-conscrypt-client</artifactId>
    </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM