У меня есть архитектура микроуслуг, которая выглядит следующим образом:
Пользовательский интерфейс <-> Spring-boot-rest-app1 <-> Spring-boot-rest-app2 <-> Хранилище данных
app1 заботится о некоторых вещах, связанных с отдыхом (проверка, преобразование объектов и т. Д.), А app2 обрабатывает общение с хранилищем данных. Окончательный результат возвращается в пользовательский интерфейс.
Однако для конкретной конечной точки полезная нагрузка POST огромна (массив JSON из 80 тыс. Объектов (примерно 10 ключей каждый)).
Для этой конкретной конечной точки я бы хотел, чтобы spring-boot-rest-app1 не беспокоилась о сериализации почтовой нагрузки и передавала ее непосредственно Spring-boot-rest-app2. Затраты на сериализацию в два раза больше не стоят, и я хотел бы выяснить, допустимо ли однократное сериализацию.
В настоящее время маршрут определен как таковой в app1:
@ApiOperation(value = "Do long operation")
@PostMapping(value = "/route", produces = "application/json")
public Result longOperation(@RequestBody CumbersomeObject input) throws IllegalArgumentException {
validate(input);// for example
return app2.connector.longOperation2(input); // for example
}
Я попытался вставить ProxyExchange.java в мое приложение напрямую и вызвать его так:
@PostMapping(value = "/route", produces = "application/json")
public ResponseEntity<?> proxy(ProxyExchange<Object> proxy) {
return proxy.uri("${url.app2}/app2Route").post();
}
Но весна жаловалась на то, что у него нет метода инициализации. Я взглянул на этот вопрос , в котором говорилось, что я не могу напрямую добавить данные шлюза в качестве зависимости.
Мне не нужно сохранять слишком много свойств прокси, мне просто нужен самый простой способ для app1 отправить запрос в app2 с минимальными сериализацией и накладными расходами.
Естественно, я не против того, чтобы жертвовать безопасностью типов, просто стараюсь максимально снизить задержку приложения.
К сожалению, из-за существующей кодовой базы я несколько ограничен в архитектурных изменениях, которые я могу сделать.