我有一个微服务架构,其布局如下:
UI <-> Spring-boot-rest-app1 <-> Spring-boot-rest-app2 <->数据存储
app1处理一些与休息有关的事情(验证,转换对象等),而app2处理与数据存储区的对话。最终结果返回到UI。
但是,对于特定端点,POST有效负载非常庞大(JSON数组包含8万个对象(每个大致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
}
I attempted to pull ProxyExchange.java into my application directly,并按如下方式调用它:
@PostMapping(value = "/route", produces = "application/json")
public ResponseEntity<?> proxy(ProxyExchange<Object> proxy) {
return proxy.uri("${url.app2}/app2Route").post();
}
但是spring抱怨它没有初始化方法。我看了一下this question,这表明我不能直接将网关内容添加为依赖项。
我真的不需要保留太多的代理属性,我只需要最轻巧的方式让app1在最小的序列化和开销下将请求发送到app2。
自然,我不介意牺牲类型安全性,只是希望尽可能降低app1的延迟。
不幸的是,由于现有的代码库,我在可以进行的体系结构更改方面受到了一定限制。