首页 文章

Akka / scala -OversizedPayloadException如何handel呢?

提问于
浏览
2

我们在akka集群上有一个分布式应用程序 . 演员“A”向远程演员发送大尺寸的消息 . 我们收到以下警告:

2016-08-10 23:08:29,737 [EndpointWriter]错误 - 瞬态关联错误(关联保持活动)akka.remote.OversizedPayloadException:丢弃发送给Actor的超大有效负载[akka.tcp://abcd@127.0.0.1:51665 / temp / $ b]:max允许的大小为128000字节,编码类common.data.model.configuration.UserList的实际大小为571444字节 .

我们知道我们可以增加configuration中的值 . 但我们想检查大小是否超出我们要发送不同消息的默认限制 . 尝试搜索,但没有运气他们大多数只告诉如何配置它没有人谈论如何处理它并向远程机器发送消息 . 任何建议或帮助将不胜感激 .

3 回答

  • 0

    实际上,我们能够处理它,只需要订阅 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])
    
  • 2

    将相同的查询发布到Akka邮件组 . 他们说没有选择处理这个“OversizedPayloadException” . 你建议我们在返回演员之前检查数据大小和汉德 .

  • 1

    尝试订阅事件流 . 希望那个例外将在那里结束:

    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

相关问题