超出 Akka 负载大小

Akka Payload Size Exceeded

我正在尝试查找处理 akka Payloadsizeexceeded 异常的方法。但是由于没有办法处理它,我想知道正在传递的消息的大小。为此,我想计算消息的大小,这个大小需要给出正在传递的集群消息的确切大小,而不仅仅是我请求中的 json 大小。有没有办法知道这个尺寸?

例如,我的 json 大小是 31998 字节,但是当消息在参与者之间传递时,会发生一些编码,传递的消息的实际大小增加到 32778。我怎么知道这个最终邮件大小?

当您在 actor 系统之间发送消息时,消息负载周围有一个信封,其中包含接收方 actor ref、发送方 actor ref、标识要使用的序列化程序和一些其他内容。其中一些包含字符串(actor 路径、actor 系统名称、节点主机名),这会影响到很难准确地说出开销有多大。

我建议您添加测试范围,在预期的参与者之间远程发送消息,然后考虑到在决定接受多大的有效负载时主机名可能会有所不同,请保持保守。

请注意,如果您需要比默认 128k 大很多倍的有效载荷,最好考虑将有效载荷拆分成更小的消息,或者使用某种形式的侧信道来传输数据,因为这会导致头部其他较小消息的线路阻塞,例如远程处理心跳,使远程处理和集群不太稳定。

新的远程子系统尚未 stable/production 准备就绪,它支持大消息的单独通道,另外还对 actor 引用进行压缩,以便经常远程通信的 actor 将由索引标识在缓存中而不是完整序列化的 actor ref.