我正在用Ktor和Jetty创建一个应用程序。有一条规则,在采取特定操作之前,我需要检查端点是否向上/向下。为此,我创建了一个根据服务检查的函数。
suspend fun checkStatus(
target: Target,
login: String,
passwordLogin: String,
url: String
) {
when (target) {
Target.Elasticsearch -> {
val client = HttpClient(Jetty) {
install(Auth) {
basic {
username = login
password = passwordLogin
}
}
}
runCatching {
client.get<String>(url)
}.onFailure {
it.printStackTrace()
throw it
}
}
}
}为了减小函数的大小,我使用了elasticsearch的示例。因此,我有一个函数来检查elasticsearch是否向上/向下
suspend fun checkElasticStatus(
username: String,
password: String,
https: Boolean,
host: String,
port: String
) = checkStatus(
target = Target.Elasticsearch,
login = username,
passwordLogin = password,
url = if (https) "https://$host:$port" else "http://$host:$port"
)因此,我在Controller中使用这个函数,然后再继续使用某些逻辑。
fun Route.orchestration() {
route("/test") {
post {
runCatching {
checkElasticStatus(
environmentVariable(ev, "elk.username"),
environmentVariable(ev, "elk.password"),
environmentVariable(ev, "elk.https").toBoolean(),
environmentVariable(ev, "elk.host"),
environmentVariable(ev, "elk.port")
)
/** other codes **/
}
}
}
}但我总是会犯错:
org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283),org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422),org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277),org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381),org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:259),org.eclipse.jetty.util.IteratingCallback。处理(IteratingCallback.java:241)在org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223),org.eclipse.jetty.http2.HTTP2Session.newStream(HTTP2Session.java:543),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt:40),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt),io.ktor.client.engine.jetty.UtilsKt.withPromise(utils.kt:14),io.ktor.client.engine.jetty。JettyHttpRequestKt.executeRequest(JettyHttpRequest.kt:39) at io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$1.invokeSuspend(JettyHttpRequest.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) 原因: java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:501) at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263)的java.nio.channels.AsynchronousCloseException .又多了18 org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:283),org.eclipse.jetty.io.WriteFlusher.flush(WriteFlusher.java:422),org.eclipse.jetty.io.WriteFlusher.write(WriteFlusher.java:277),org.eclipse.jetty.io.AbstractEndPoint.write(AbstractEndPoint.java:381),org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:259),org.eclipse.jetty.util.IteratingCallback。处理(IteratingCallback.java:241)在org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:223),org.eclipse.jetty.http2.HTTP2Session.newStream(HTTP2Session.java:543),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt:40),io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$jettyRequest$1.invoke(JettyHttpRequest.kt),io.ktor.client.engine.jetty.UtilsKt.withPromise(utils.kt:14),io.ktor.client.engine.jetty。JettyHttpRequestKt.executeRequest(JettyHttpRequest.kt:39) at io.ktor.client.engine.jetty.JettyHttpRequestKt$executeRequest$1.invokeSuspend(JettyHttpRequest.kt) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665) 原因: java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:501) at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:263)的java.nio.channels.AsynchronousCloseException .又多了18
有人能帮帮我吗?
发布于 2020-07-23 14:55:34
Jetty引擎只支持HTTP/2协议。
当我向只能使用HTTP/1.1 (例如http://www.google.com )响应的资源发出请求时,会引发http://www.google.com。
然而,这一错误是误导性的,而且在the跟踪器中也有一个问题。
https://stackoverflow.com/questions/63025379
复制相似问题