Apollo 路由器协处理器问题:Java POJO 无法进行上下文传播

问题描述 投票:0回答:1

我目前正在为 Apollo Router 企业版编写 Java 协处理器。我需要它从 RouterRequest 阶段传播值,一直到 RouterResponse 阶段。

我最初编写了它,例如 RouterRequest 阶段在请求对象的上下文条目中存储一些信息。这里的课程如下:

它有效,但并不理想; context.get("entries) 的弱类型 LinkedHashMap 迫使我进行各种类型转换以稍后检索它们。

然后,我构建了一个 DTO,其中包含 RouterResponse 阶段所需的所有字段,以替换我用于放入 context.entries Map 中的所有键。

但是我找不到在阶段之间的 context.entries 中正确传播此 DTO 的方法。它总是被序列化为 LinkedHashMap,这再次迫使我在每次需要时都进行反序列化。

我从文档中了解到,仅传播上下文的字段“条目”。我还偶然发现了这个 PR:https://github.com/apollographql/router/pull/4474,这似乎表明还传播了一个字段“扩展”,它可能会支持我的 DTO 而无需更改其类型。不过,我的测试表明字段 context.extensions 不会跨阶段传播。

这个问题并不是太重要,因为我总是可以从 context.entries 反序列化我的对象,但这对我来说是一个性能问题。

所以我的问题是:我是否做错了什么,或者我们不应该尝试在上下文中传播整个 Java POJO?有没有更好的方法来实现POJO跨阶段传播?

Apollo路由器版本:v1.50.0

graphql apollo
1个回答
0
投票

由于路由器通过 POST 向协处理器发送和接收 JSON 有效负载,因此您始终必须在 POJO 之间反序列化和序列化 JSON。

© www.soinside.com 2019 - 2024. All rights reserved.