0

我正在尝试使用以下内容查询已部署的 PredictionIO 引擎:

curl --max-time 2000 --connect-timeout 60 -H "Content-Type: application/json" \
     -d '{
       "ids": [
         "AAAAAAAA-9999-4444-ACAC-18181818181818"
       ],
       "other": "value"
      }' \

但我只收到以下内容:

服务器无法及时响应您的请求

我知道这意味着 Spray 正在接收请求(即 Spray 超时消息),但由于某种原因,无论多长时间,它都永远不会完成request-timeout

我的日志表明该predict方法从未被调用,这表明在 PredictionIO 请求处理程序逻辑中卡住了一些东西。

4

1 回答 1

0

这确实是请求处理程序逻辑的问题,特别是查询反序列化到我的Query类中。有一个已知的 json4s 缺陷会阻止对Query具有泛型类型别名的类进行反序列化。以下将产生一个无限循环:

object User {
  type Id = Int
}

case class Query(ids: Seq[User.Id], other: String)
// This will never complete
org.json4s.jackson.Serialization.write(Query(Seq(1,2,3), "Hello World"))

删除类型别名User.Id并将其替换为Int将解决问题。

case class Query(ids: Seq[Int], other: String)
org.json4s.jackson.Serialization.write(Query(Seq(1,2,3), "Hello World"))
res0: String = {"users":[1,2,3],"other":"Hello World"}
于 2016-05-19T18:00:09.700 回答