繁体   English   中英

Quarkus 本机模式 - org.glassfish.jersey.internal.RuntimeDelegateImpl Class 未找到

[英]Quarkus native mode - org.glassfish.jersey.internal.RuntimeDelegateImpl Class not found

我在本机模式下使用 Quarkus 2.6.0,使用 Quarkus 进行 CXF 调用并以 JSON 格式返回这些结果,所以我使用的是 resteasy 和 resteasy-jackson。

        <dependency>
            <groupId>io.quarkiverse.cxf</groupId>
            <artifactId>quarkus-cxf</artifactId>
            <version>0.11.0</version>
        </dependency>

该服务在本机模式下编译和执行,在正常情况下,该服务支持大约 150 万个请求。 但是其中一些(可能在 5 到 10 之间),服务引发了这个错误,我不知道为什么(最糟糕的是,我无法在本地环境中重现它)

我不确定在反射配置文件中发现 class 是否会解决问题(我会试一试)。

有任何想法吗?

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:129)
    at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:96)
    at org.jboss.resteasy.spi.ResteasyProviderFactory.getInstance(ResteasyProviderFactory.java:117)
    at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:82)
    at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:151)
    at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:91)
    at io.quarkus.vertx.core.runtime.VertxCoreRecorder$13.runWith(VertxCoreRecorder.java:543)
    at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
    at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
    at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
    at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:829)
    at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:600)
    at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl
    at java.lang.Class.forName(DynamicHub.java:1347)
    at java.lang.Class.forName(DynamicHub.java:1322)
    at javax.ws.rs.ext.FactoryFinder.newInstance(FactoryFinder.java:93)
    at javax.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:210)
    at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:111)

我不知道这是否重要,但我们有 Horizontal Pod Autoscaling,而且在白天,Pod 的数量会波动。

更多证据: 在此处输入图像描述

在此处输入图像描述

最后,我解决了这个问题。 问题是我们在terminationGracePeriodSeconds变量中有少量时间(在我们的例子中是 5 秒)。

所以 K8S 杀死了 pod,最后一个请求失败了(我想有些 bean 不能被实例化,这就是它引发 RuntimeException 的原因)。

我们增加了那个周期,问题就解决了。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM