【问题标题】:Finagle server dont ready after startFinagle 服务器启动后没有准备好
【发布时间】:2018-05-05 04:44:33
【问题描述】:

我有一个 Finagle 服务器,显然无法知道何时真正启动。

有这个代码

esbMockServer = Some(defaultServer
        .serve(s"localhost:$esbPort", esbService))
      println(s"Running Finagle Regular Esb Mock Server in port $esbPort.......")
      Await.ready(esbMockServer.get,10 second)

总是在 Await 中抛出一个超时异常,但它从第二个 1 开始就正常运行。

知道这里出了什么问题吗?

【问题讨论】:

    标签: java scala finagle twitter-finagle


    【解决方案1】:

    Await.ready 并不像您认为的那样做。它与Await.result 基本相同,只是它返回Awaitable 对象本身而不是结果。

    底线是,Await.ready 将返回Server停止.close 被调用),而不是在它“准备好”时返回”……后者应该是这样,差不多,马上,不用等了。

    通常,您需要将Await.ready(server) 放在main 函数的末尾以永远阻塞主线程,直到服务器退出。

    【讨论】:

    • 对不起,“后者应该是这样,差不多,马上,你不需要等待它。”不清楚,什么意思。。如果我不放置 Thread.sleep(5000) 则请求崩溃,因为服务器尚未准备好。我也使用相同的线程来运行服务器并运行我的测试。
    • 什么“请求崩溃”?
    • 如果我启动服务器然后我向该服务器发出请求,没有等待 N 次我收到一个错误,因为请求失败。如果我将 Thread.sleep 设置为 5 秒,则请求正常工作。但显然这种机制不是很确定。
    • 我不确定您要做什么。为什么要启动服务器,并立即向它发送请求?这似乎是某种反模式。您不应该使用在生产中使用的相同代码进行测试。首先部署服务器。等待健康检查成功。然后使用单独的作业向它发送请求以进行测试。
    • 当然我们会这样做,但是第一次使用 finagle 服务器真的很慢,而且我的一些测试失败了,因为我需要先进行热身。
    猜你喜欢
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2013-08-16
    相关资源
    最近更新 更多