【发布时间】:2013-09-11 13:40:01
【问题描述】:
我目前有以下架构:
Load(Play app with basic interface for load testing) -> Gateway(Spray application with REST interface for incoming messages) -> Processor(akka app that works with MongoDB) -> MongoDB
只要我推送的消息数量很少,一切正常。但是,当我尝试推送 10000 个事件时,最终会在 MongoDB 作为文档结束,它会在随机位置停止,例如在 742 消息或 982 消息上,之后什么也不做。
调试这种情况的最佳方法是什么?在负载方面,我只是在努力推动 REST 服务:
for (i ← 0 until users) workerRouter ! Load(server, i)
然后在workerRouter中
WS.url(server + "/track/message").post(Json.toJson(newUser)).map { response =>
println(response.body)
true
}
在喷雾方面:
pathPrefix("track") {
path("message") {
post {
entity(as[TrackObj]) { msg =>
processors ! msg
complete("")
}
}
}
}
在处理器方面,它基本上只是插入到集合中。关于从哪里开始有什么建议吗?
更新: 我试图将创建消息的逻辑移到 Gatewat,循环 1 到 10000,它工作得很好。但是,如果在管道中涉及喷涂和播放,则会中断和随机放置。在这种情况下如何调试有什么建议吗?
【问题讨论】:
-
您尝试过 Typesafe 控制台吗?
-
不,我还没有尝试过。我发现问题出在 Play Spray 通信中,因为如果我只在 Spray 端进行 100000 条记录(意味着没有 HTTP 通信),它可以正常工作。
-
啊,好的。你问过喷雾用户毫升吗?
-
当它被卡住时,你能检查你的线程在做什么(
jstack <pid>)吗?这些天来,我们几乎每天都会遇到由线程饥饿引起的问题。如果您发现可疑内容,请将其发布在 Spray-user ML 上。 -
我解决了这个问题,请阅读下文。
标签: mongodb scala playframework-2.0 akka spray