2

私たちはakkaクラスタ上に分散アプリケーションを持っています。アクタ「A」は、大きなサイズのメッセージをリモートアクタに送信します。一時協会 エラー(関連が生きたまま) akka.remote.OversizedPayloadException - 29737は、[EndpointWriter] ERROR:破棄に送信された特大のペイロード Akka/scala-OversizedPayloadExceptionハンドリングする方法は?

2016年8月10日23:08そして、我々は次の警告を取得しますアクター[akka.tcp://[email protected]:51665/temp/$ b]:最大許容 サイズ128000バイト、エンコードされたクラスの実際のサイズ common.data.model.configuration.UserListは571444バイトでした。

configurationの値を増やすことができます。しかし、サイズがデフォルトの制限を超えているかどうかを確認したかったので、別のメッセージを送信してみました。試してみましたが、運がない人の大半は、どのように処理し、リモートマシンにメッセージを送信するかについて誰も話してくれないように構成する方法だけを説明しています。ご意見やご協力をいただければ幸いです。

答えて

1

は実際に、私たちは、それを処理することができます原因はOversizedPayloadExceptionある場合だけ、akka.event.Logging.Errorに加入する必要がある、と確認してください。

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]) 
+0

fantastic ...それを利用しようとします。ありがとうございました。 – Prakash

0

イベントストリームを購読しようとしてください。うまくいけば、その例外が終了します。

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

+0

私は上記をしようとすると、私はパッケージでエラー「クラスOversizedPayloadExceptionを取得しますリモートはパッケージ「akka.remote」でアクセスできません。私はいくつかの基本的な間違いをしていると確信しています。あなたは私を導くことができますか? – Prakash

+0

この例外が発生する理由は何ですか? – Prakash

+1

@Prakash 'OversizedPayloadException'はakka.remoteパッケージ内ではプライベートなので、アクセスできません。 p.s.私は知っている、それはおそらくあなたのために遅すぎるが、他の人のためにおそらく... :) –

2

は、アッカのメーリンググループに同じクエリを投稿しました。彼らは、この "OversizedPayloadException"をハンドリングするオプションがないように言った。私たちが俳優に戻る前に、データサイズを確認してそれを伝えておくことをお勧めします。

+0

私はclustermessageの一部として送信しているjsonサイズをチェックしようとしていますが、メッセージサイズが制限値に非常に近い(ただしそれでもなお少ない)境界ケースでは、エンコーディングであるというエラーがスローされますメッセージはさらにエンコーディングされてサイズが大きくなります。送信されるエンコードされたメッセージのサイズを取得する方法を教えてください。 –

関連する問題