我正在学习Spray和Akka.使用其中一个路由存根构建了一个简单的Spray路由应用程序 -
path("blog" / LongNumber) { blogId => respondWithMediaType(MediaTypes.`application/json`) { get { request => BlogFetchActor ! Get(blogId) } } }
在上面的代码中,我在我的喷涂路由定义(在实现HttpService的类中)中将消息分派给请求中具有ID(blogId)的另一个Actor.BlogFetchActor应该从数据库中获取数据并响应发送者.我的编码如下 -
def receive: Receive = LoggingReceive { case Get(id: Long) => { log.debug("Retrieving blog with id %d".format(id)) sender ! ReturnBlog(get(id)) } }
来自路线的Actor消息正在进入我的BlogFetchActor.我的BlogFetchActor也完成了从数据库中获取数据的工作.但是当我尝试将响应发送回发件人HttpService,ReturnBlog消息时,它不起作用.消息最终在DeadLetters中,我在我的日志中看到以下内容 -
从演员[akka:// on-spray-can/user/blog-service/blog#1301907662]到演员[akka:// on-spray-can/deadLetters]的消息[in.bharathwrites.BlogFetchActor $ ReturnBlog]不是交付.
为什么回复给发件人的回复不起作用?我究竟做错了什么?我怎么能做到这一点?我试过阅读Spray文档和ScalaDoc,但无法弄清楚问题.我不够精通阅读Spray代码并了解原因......提前致谢