Я работаю над проектом с использованием mule и rabbitmq. Сценарий заключается в том, что мое приложение прослушивает очередь, обрабатывает сообщение и затем отвечает на него. Мой вопрос: получать ли Java-объект с помощью мула «byte-array-to-object-transformer» и возвращать объект ответа может иметь лучшую производительность, чем получение json, преобразование его в связанный объект, а затем преобразование ответа снова и возвращение json назад. Я думаю, что это зависит от механизма кролика и механизмов мула.Связь объекта с строкой с использованием RabbitMQ и Mule
ответ
Правило № 1 проблем с производительностью: У вас нет проблемы с производительностью, пока вы не сможете доказать, что у вас есть.
Это говорит, вот интересный бит от https://github.com/RichardHightower/json-parsers-benchmark/wiki/Serialization-Jackson-vs.-Boon-vs.-Java-Serialization:
Большинство людей считают, что объект Java сериализации быстрее, чем Джексон JSON сериализации, потому что Джексон использует JSON и Java сериализация объекта является двоичным. Но большинство людей ошибается.
Сериализация Jackson JSON намного быстрее, чем встроенный объект Java Сериализация.
Лично я, как правило, стараюсь не передавать сериализованные объекты Java через провод, потому что все может разрушаться ужасно. Это более надежный способ отправить данные по проводу, например, как JSON. Отправка данных вместо сериализованных объектов позволяет вам быть очень слабым в том, как вы с ним справляетесь, например, изящно работая с новыми/неожиданными полями вместо того, чтобы умереть в огне из-за двоичной несовместимости.
Мы используем RabbitMQ с сериализацией (предоставляется отдельной библиотекой). Это дает лучшую производительность, чем JSON с точки зрения длины сообщения, но это может быть не очень важно в вашем случае.
Минус подхода сериализации заключается в том, что все ваши объекты (и все их непереходные поля) должны быть Serializable, что не всегда возможно. Кроме того, при использовании сериализации вы всегда должны следить за тем, чтобы как отправляющая, так и принимающая части говорили на одном языке, то есть имели одинаковые версии классов.
Если вы решите пойти с сериализацией, проверьте FST - это то, что мы используем, и это отличная замена стандартной сериализации Java. Он очень прост в использовании и показывает отличные результаты как для скорости, так и для размера вывода.