1

我对 Twitter finagle 客户端/服务器的行为非常奇怪。

拥有服务器

  def start(): Unit = {
    val port=8500
    println(s"Running Finagle Mock Server in port $port.......")
    mockServer = Some(Http.server
      .configuredParams(finagle.Http.Http2)
      .configured(finagle.Http.Netty4Impl)
      .serve(s"localhost:$port", mockService))
  }

还有一个客户

  override def client():Unit = {
    val clientService = Http.newService("localhost:8500")
    val future: Future[Response] = clientService(createRequestUsingBuilderWithJson())
    future.onFailure(th =>{
      println(th)
    })
    future.onSuccess(value => {
      println(value)
    })
    val response: Response = Await.result(future)
    println(response.contentString)
  }

  @throws[Exception]
  def createRequestUsingBuilderWithJson(): Request = {
    new RichHttpRequestBuilder()
     .withMethod(Method.Get).withPath("/rest_connection/external_service").build
  }

如果我在另一个 JVM 进程中将服务器作为应用程序运行,然后运行客户端一切正常,我可以访问服务器并收到 200 响应。

但是,如果不是先在另一个进程中运行,而是在运行客户端之前在 samr JVM 中运行服务器,则通信永远不会到达服务器,而我只是在我的 onFailure 客户端回调中收到

DefaultHttpResponse(chunked: false)
HTTP/1.1 500 Internal Server Error
content-length: 0
Connection: close

知道为什么我不能在同一个 JVM 中运行客户端/服务器吗???

4

0 回答 0