Размер полезной нагрузки Akka превышен
Я пытаюсь найти обработчик исключения akka Payloadsizeexceeded. Но поскольку нет способа справиться с этим, я хотел бы знать размер передаваемого сообщения. Для этого я хотел бы рассчитать размер сообщения, и этот размер должен дать точный размер передаваемого кластерного сообщения, а не только размер json внутри моего запроса. Есть ли способ узнать этот размер?
Например, мой размер json составляет 31998 байт, но когда сообщение передается между актерами, происходит некоторое количество кодирования, и фактический размер передаваемого сообщения увеличивается до 32778. Как я могу узнать этот окончательный размер сообщения?
1 ответ
Когда вы отправляете сообщение между системами акторов, вокруг полезной нагрузки сообщения появляется конверт, который содержит ссылку на актера получателя, ссылку на актера отправителя, определяет используемый сериализатор и некоторые другие вещи. Некоторые из них содержат строки (путь актера, имя системы актора, имя хоста узла), что повлияет на сложность точного определения размера накладных расходов.
Я бы порекомендовал вам добавить тестовое покрытие, отправляющее сообщения удаленно между ожидаемыми участниками, а затем быть консервативным, учитывая, что имена хостов, скорее всего, будут отличаться при принятии решения о том, какую большую нагрузку принять.
Обратите внимание, что если вам нужны во много раз большие полезные нагрузки, чем стандартные 128 Кбайт, то лучше вместо этого разделить полезные нагрузки на более мелкие сообщения или использовать некоторую форму побочного канала для передачи данных, поскольку это приведет к блокировке заголовка линии для других меньших такие сообщения, как пульс удаленного доступа, делают удаленное взаимодействие и кластер менее стабильными.
В новой подсистеме удаленного взаимодействия, которая еще не является стабильной / готовой к производству, поддерживается отдельный канал для больших сообщений, а также дополнительно выполняется сжатие ссылок на актеров, так что субъекты, часто общающиеся удаленно, будут идентифицироваться по индексу в кеше, а не по полному сериализованный актер исх.