Akka/scala-OversizedPayloadException 如何处理?
Akka/scala-OversizedPayloadException How to handel it?
我们在 akka 集群上有一个分布式应用程序。演员“A”向远程演员发送大尺寸消息。我们收到以下警告:
2016-08-10 23:08:29,737 [EndpointWriter] ERROR - Transient association
error (association remains live)
akka.remote.OversizedPayloadException: Discarding oversized payload
sent to Actor[akka.tcp://abcd@127.0.0.1:51665/temp/$b]: max allowed
size 128000 bytes, actual size of encoded class
common.data.model.configuration.UserList was 571444 bytes.
我们知道我们可以增加 configuration 中的值。但是我们想检查大小是否超过我们要发送不同消息的默认限制。尝试搜索但没有运气,他们中的大多数人只告诉如何配置它,没有人谈论如何处理它并向远程机器发送消息。任何建议或帮助将不胜感激。
尝试订阅事件流。希望例外会到此为止:
import akka.actor.{Actor, Props}
import akka.remote.OversizedPayloadException
class Listener extends Actor {
def receive = {
case d: OversizedPayloadException => {
// DO SOMETHING
}
}
}
val listener = system.actorOf(Props(classOf[Listener], this))
system.eventStream.subscribe(listener, classOf[OversizedPayloadException])
更多信息here
向 Akka 邮件组发布了相同的查询。他们说没有处理这个 "OversizedPayloadException" 的选项。你建议我们在 return 给演员之前检查数据大小并处理它。
其实我们可以处理的,只需要订阅akka.event.Logging.Error
,然后检查,如果原因是OversizedPayloadException
:
import akka.actor.{Actor, Props}
class Listener extends Actor {
override def receive: Receive = {
case akka.event.Logging.Error(cause, _, _, _)
// this internal Akka class is package-private, hence we have to check it's classname :(
if cause.getClass.getName == "akka.remote.OversizedPayloadException" =>
// handle it here!
}
}
val listener = system.actorOf(Props(new Listener))
system.eventStream.subscribe(listener, classOf[akka.event.Logging.Error])
我们在 akka 集群上有一个分布式应用程序。演员“A”向远程演员发送大尺寸消息。我们收到以下警告:
2016-08-10 23:08:29,737 [EndpointWriter] ERROR - Transient association error (association remains live) akka.remote.OversizedPayloadException: Discarding oversized payload sent to Actor[akka.tcp://abcd@127.0.0.1:51665/temp/$b]: max allowed size 128000 bytes, actual size of encoded class common.data.model.configuration.UserList was 571444 bytes.
我们知道我们可以增加 configuration 中的值。但是我们想检查大小是否超过我们要发送不同消息的默认限制。尝试搜索但没有运气,他们中的大多数人只告诉如何配置它,没有人谈论如何处理它并向远程机器发送消息。任何建议或帮助将不胜感激。
尝试订阅事件流。希望例外会到此为止:
import akka.actor.{Actor, Props}
import akka.remote.OversizedPayloadException
class Listener extends Actor {
def receive = {
case d: OversizedPayloadException => {
// DO SOMETHING
}
}
}
val listener = system.actorOf(Props(classOf[Listener], this))
system.eventStream.subscribe(listener, classOf[OversizedPayloadException])
更多信息here
向 Akka 邮件组发布了相同的查询。他们说没有处理这个 "OversizedPayloadException" 的选项。你建议我们在 return 给演员之前检查数据大小并处理它。
其实我们可以处理的,只需要订阅akka.event.Logging.Error
,然后检查,如果原因是OversizedPayloadException
:
import akka.actor.{Actor, Props}
class Listener extends Actor {
override def receive: Receive = {
case akka.event.Logging.Error(cause, _, _, _)
// this internal Akka class is package-private, hence we have to check it's classname :(
if cause.getClass.getName == "akka.remote.OversizedPayloadException" =>
// handle it here!
}
}
val listener = system.actorOf(Props(new Listener))
system.eventStream.subscribe(listener, classOf[akka.event.Logging.Error])