我試圖發送收到的http請求的內容到akka節點來處理。我已經嘗試了下面的內容類型和akka收到正確的消息。但是,當我發送AnyContentAsMultipartFormData
時,akka不會接受它。播放框架發送AnyContentAsMultipartFormData消息到aka節點
我想知道爲什麼。
下面是我的日誌,通過發揮框架接收的HTTP請求:
2015-08-29 15:05:08.952 [INFO] [application] in application-akka.actor.default-dispatcher-5
body is AnyContentAsFormUrlEncoded(Map(test -> ArrayBuffer(test)))
2015-08-29 15:06:31.867 [INFO] [application] in application-akka.actor.default-dispatcher-18
body is AnyContentAsText({})
2015-08-29 15:08:23.787 [INFO] [application] in application-akka.actor.default-dispatcher-18
body is AnyContentAsJson({})
2015-08-29 15:09:07.290 [INFO] [application] in application-akka.actor.default-dispatcher-6
body is AnyContentAsMultipartFormData(MultipartFormData(Map(abc -> List(2), test -> List(1)),List(),List(),List()))
而阿卡日誌如下:
2015-08-29 15:05:09.146 [INFO] [actors.PlatService] in application-akka.actor.default-dispatcher-2
body is AnyContentAsFormUrlEncoded(Map(test -> ArrayBuffer(test)))
2015-08-29 15:06:31.893 [INFO] [actors.PlatService] in application-akka.actor.default-dispatcher-17
body is AnyContentAsText({})
2015-08-29 15:08:23.935 [INFO] [actors.PlatService] in application-akka.actor.default-dispatcher-18
body is AnyContentAsJson({})
AnyContentAsMultipartFormData就不能接收。
我想知道是否有辦法解決這個問題?
多一點的測試之後,我遇到了這個例外:
2015-08-30 16:02:01.787 [ERROR] [akka.remote.EndpointWriter] in application-akka.actor.default-dispatcher-5
Transient association error (association remains live)
java.io.NotSerializableException: scala.collection.immutable.MapLike$$anon$2
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[na:1.8.0_45]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) ~[na:1.8.0_45]
at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply$mcV$sp(Serializer.scala:234) ~[com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:234) ~[com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:234) ~[com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) ~[org.scala-lang.scala-library-2.11.6.jar:na]
at akka.serialization.JavaSerializer.toBinary(Serializer.scala:234) ~[com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.remote.serialization.MessageContainerSerializer.serializeSelection(MessageContainerSerializer.scala:45) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.serialization.MessageContainerSerializer.toBinary(MessageContainerSerializer.scala:34) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.MessageSerializer$.serialize(MessageSerializer.scala:37) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.EndpointWriter$$anonfun$serializeMessage$1.apply(Endpoint.scala:837) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.EndpointWriter$$anonfun$serializeMessage$1.apply(Endpoint.scala:837) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) ~[org.scala-lang.scala-library-2.11.6.jar:na]
at akka.remote.EndpointWriter.serializeMessage(Endpoint.scala:836) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.EndpointWriter.writeSend(Endpoint.scala:737) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.remote.EndpointWriter$$anonfun$4.applyOrElse(Endpoint.scala:712) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.actor.Actor$class.aroundReceive(Actor.scala:480) ~[com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.remote.EndpointActor.aroundReceive(Endpoint.scala:405) ~[com.typesafe.akka.akka-remote_2.11-2.4.0-RC1.jar:na]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:525) [com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.actor.ActorCell.invoke(ActorCell.scala:494) [com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) [com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.dispatch.Mailbox.run(Mailbox.scala:224) [com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at akka.dispatch.Mailbox.exec(Mailbox.scala:234) [com.typesafe.akka.akka-actor_2.11-2.4.0-RC1.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [org.scala-lang.scala-library-2.11.6.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [org.scala-lang.scala-library-2.11.6.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [org.scala-lang.scala-library-2.11.6.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [org.scala-lang.scala-library-2.11.6.jar:na]
看來,這可能是問題。但我不知道如何解決它。
任何消息或指令,真的很感激。提前致謝。
那麼,你沒有得到錯誤信息? – Kris
我猜測:它與MultipartFormData的延遲加載有關,而Akka不喜歡它的Actors的可變狀態。嘗試從MultipartFormData中取出所有數據,然後將其交給演員。 – Kris
謝謝你的回答。但問題只發生在節點之間。如果消息是在一個節點內發送的,那麼沒有任何丟失。但是,如果消息位於節點之間,那麼MultipartFormData將不會在遠程節點中看到。 –