【问题标题】:Akka Payload Size Exceeded超出 Akka 有效负载大小
【发布时间】:2017-08-01 14:25:24
【问题描述】:
我正在尝试查找处理 akka Payloadsizeexceeded 异常。但是由于没有办法处理它,我想知道正在传递的消息的大小。为此,我想计算消息的大小,这个大小需要给出传递的集群消息的确切大小,而不仅仅是我请求中的 json 大小。有没有办法知道这个尺寸?
例如,我的 json 大小是 31998 字节,但是当消息在参与者之间传递时,会发生一些编码,传递的消息的实际大小增加到 32778。我怎么知道这个最终的消息大小?
【问题讨论】:
标签:
exception
akka
payload
exceed
【解决方案1】:
当您在参与者系统之间发送消息时,消息有效负载周围有一个信封,其中包含收件人参与者参与者引用、发送者参与者参与者引用、标识要使用的序列化程序以及其他一些内容。其中一些包含字符串(actor 路径、actor 系统名称、节点主机名),这会影响到很难准确说出开销有多大。
我建议您添加测试覆盖率,在预期的参与者之间远程发送消息,然后考虑到主机名在决定接受多大的有效负载时可能会有所不同。
请注意,如果您需要比默认 128k 大很多倍的有效负载,最好考虑将有效负载拆分为更小的消息,或者使用某种形式的侧通道传输数据,因为这会导致行头阻塞对于其他较小的消息,例如远程处理心跳,使远程处理和集群不太稳定。
有了新的远程子系统,它还不稳定/生产就绪,它支持大消息的单独通道,另外还压缩actor refs,以便经常远程通信的actor 将通过缓存中的索引而不是比完整的序列化演员参考。