2011-08-26 4 views
2

나는 here의 예를 따랐다. 잘 됐네. 하지만 이제는 비즈니스 로직을 수행해야합니다. case get:Get =>Akka REST 서비스 + 파견

필요한 비즈니스 로직에는 dispatch 라이브러리가 포함됩니다. 간단히 말해서, 나는 어떤 페이지에 대한 요청을하고, 데이터를 얻고, 어떤 클래스에서 그것을 감싸고 그것을 반환한다.

case get:Get => { 
    get.response.setContentType(MediaType.APPLICATION_JSON) 
    val response = Sender.doLogin 
    val battery = (response.batteryRemaining/response.batteryCapacity) * 100 
    val soc = (response.pluginState + ", " + response.chargingStatus).replaceAll("_", " ") 
    val jsonResult = pretty(render(("battery" -> battery) ~ ("soc" -> soc))) 
    get OK jsonResult 
    // get OK "works" 
} 

이 작동하지 않습니다 :

ERROR [akka:event-driven:dispatcher:event:handler-5] akka.event.slf4j.Slf4jEventHandler - 
    [akka.http.Servlet30ContextMethodFactory$$anon$2] 
    [org.eclipse.jetty.io.EofException] 
    [org.eclipse.jetty.io.UncheckedIOException: org.eclipse.jetty.io.EofException 
    at org.eclipse.jetty.io.UncheckedPrintWriter.setError(UncheckedPrintWriter.java:107) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:280) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:295) 
    at akka.http.RequestMethod$$anonfun$complete$1.apply(Mist.scala:346) 
    at akka.http.RequestMethod$$anonfun$complete$1.apply(Mist.scala:343) 
    at akka.http.RequestMethod$class.rawComplete(Mist.scala:357) 
    at akka.http.Get.rawComplete(Mist.scala:407) 
    at akka.http.RequestMethod$class.complete(Mist.scala:343) 
    at akka.http.Get.complete(Mist.scala:407) 
    at akka.http.RequestMethod$class.complete(Mist.scala:340) 
    at akka.http.Get.complete(Mist.scala:407) 
    at akka.http.RequestMethod$class.OK(Mist.scala:388) 
    at akka.http.Get.OK(Mist.scala:407) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService$$anonfun$receive$1.apply(BatteryStatusService.scala:36) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService$$anonfun$receive$1.apply(BatteryStatusService.scala:28) 
    at akka.actor.Actor$class.apply(Actor.scala:563) 
    at com.thenewmotion.caronline.services.rest.BatteryStatusService.apply(BatteryStatusService.scala:27) 
    at akka.actor.LocalActorRef.invoke(ActorRef.scala:890) 
    at akka.dispatch.MessageInvocation.invoke(MessageHandling.scala:25) 
    at akka.dispatch.ExecutableMailbox$class.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:214) 
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$4.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:120) 
    at akka.dispatch.ExecutableMailbox$class.run(ExecutorBasedEventDrivenDispatcher.scala:186) 
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$4.run(ExecutorBasedEventDrivenDispatcher.scala:120) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
    at akka.dispatch.MonitorableThread.run(ThreadPoolBuilder.scala:181) 
Caused by: org.eclipse.jetty.io.EofException 
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:150) 
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:97) 
    at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:109) 
    at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:283) 
    at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107) 
    at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:271) 
    ... 25 more 
] 

을 또한 후에는 (파견 라이브러리) 요청 을 시작하는 것으로 보인다는 응답

내 수신의 경우는 다음과 같습니다 HTTP 200 OK.

여기에서 문제가 될 수있는 것은 무엇입니까?

+1

을 사용 사례가 물건을 정확하게 종류로 보인다 [파란 눈] (https://github.com/jdegoes/blueeyes) 를 위해 만들어졌습니다. –

+0

감사합니다. 시험해 보겠습니다. – folone

답변

3

하는 연결 가까운 해제하십시오 : 그것은 가치가 무엇이든 들어 https://github.com/jboner/akka/blob/master/config/akka-reference.conf#L262

+0

도움이되지 않았습니다. 또한 수신 본문의 모든 디스패치 요청이이 예외를 초래한다는 사실을 확인했습니다. – folone

+0

그건 재미 있어요. 약 10 분 동안 요청하지 않고 방치하면 한 번 작동 한 다음 다시 작동을 멈 춥니 다. – folone

+0

get.response.setContentType (MediaType.APPLICATION_JSON) 을 get OK 전에 설정하면 어떻게됩니까? –