问题标签 [netflix-dgs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
344 浏览

graphql - 联合 GraphQL 模式验证

我在我的项目中创建了 3 个微服务并实现了 GraphQL Netflix DGS 联合框架。https://netflix.github.io/dgs/ 作为一家公司,我们拥有来自不同团队的不同微服务的 30 多个模式。但是,如果模式类型名称在不同的微服务中相互重复,我们会在 Apollo 网关中遇到运行时错误。我想知道如何验证模式?是否有任何引擎/库/概念来验证多个微服务等上的联合 GraphQL 模式?我正在检查架构注册表,但看起来它是用于存储架构和版本控制等,而不是完全验证架构。示例架构和错误:服务 1 中的架构:

服务 2 中的模式:

在上述两个模式中,模式类型“Info”在两个微服务中是相同的。通过 ApolloGateway 实现这两个服务后,它抛出运行时错误:“此数据图缺少有效配置。无法组合有效模式。发现以下组合错误:只能有一种名为“信息”的类型

0 投票
1 回答
176 浏览

graphql - 使用 API 密钥查询 GraphQL 微服务?

我在这两个微服务之上开发了两个 Netflix DGS GraphQL 微服务和 Apollo Gateway,使它们成为一个联合的 graphql。我有一个客户端应用程序正在尝试查询两个 graphql 微服务。并且这两个微服务都有一个唯一的 API 密钥。我们如何从客户端或 Apollo 服务器为多个微服务分配 API 密钥?当客户端使用 API 密钥查询多个微服务时,服务器可能会忽略 API 密钥。是否有处理 API 密钥管理的最佳实践?

0 投票
0 回答
36 浏览

graphql - 具有多个网关但具有相同 DGS 框架的 Graphql

我正在尝试使用 Netflix DGS GraphQL 框架来测试 GraphQL 查询。我已经安装并使用了 Apollo 网关。一切正常。我有个疑问。如果我想使用具有多个网关但具有相同 DGS 框架的 Graphql,是否有可能以及如何做到这一点?

谢谢,

0 投票
0 回答
110 浏览

java - 带有模拟测试的 Dgs 框架?

目前,我正在使用 dgs 框架从 GraphQL 服务器调用数据。现在我想创建一个 mocking(mockito) 和 junit 来测试它。我如何实现它的单元测试?

0 投票
0 回答
151 浏览

java - 如何创建使用 NetFlix DGS 客户端的控制台应用程序

我想使用来自 NetFlix 的外观精美的DGS 框架对 GraphQL 服务进行客户端调用。

我发现的所有示例都假设我正在构建一个服务,并且Java GraphQL 客户端是作为事后才引入的。

我要从中调用服务的应用程序只是一个控制台应用程序。它不需要网络服务器,不需要dgsQueryExecutor架构。然而,当我运行我的应用程序时,它会出现大量关于这些需要的运行时错误。

我是 Java/Maven/SpringBoot 世界中的一个相对新手,并且仍在为事情的启动概念而苦苦挣扎,而无需我询问他们;并删除依赖项。

这是我的 pom.xml:

这是我的主要课程(注意:它实际上还没有做任何事情,我只是希望它运行没有错误)。

0 投票
0 回答
90 浏览

graphql-java - 在 Spring Boot 应用程序启动期间访问 graphql 模式

有一个使用 netflix-dgs 的 Spring Boot 应用程序。我正在使用一些自定义指令,需要解析模式以获取这些指令。目前我正在根据使用请求执行此操作DgsDataFetchingEnvironment.getGraphQLSchema()

这确实效率低下,我想GraphQLSchema在服务器启动时访问该对象,以便我可以一次解析这些指令并为每个请求重新使用它。

DGS 中的类DgsAutoConfiguration创建了一个 bean,GraphQLSchema但添加它会导致我的 datafetcher 和DgsAutoConfiguration.

当前低效的代码:

添加部门:

我得到的错误:

任何帮助,将不胜感激。

0 投票
0 回答
106 浏览

java - Netflix DGS 中使用 ThreadLocal 的 Servlet 过滤器

堆栈:Spring Boot:2.4.5 DGS:3.11.0

案例:需要过滤每个请求并从中读取 HTTP 标头。标头中的值应该可以在处理 GraphQL 请求的下游代码中访问。一种常见的方法是使用带有 ThreadLocal 的 Servlet 过滤器来存储这些值。

问题:DGS 使用 CompletableFutures 处理传入的 GraphQL 请求,因此即使设置了过滤器并将数据读取到 ThreadLocal,它也不会在 DGS 的执行线程中可用。

解决此类问题的推荐方法是什么?

0 投票
1 回答
91 浏览

java - 如何访问对象而不将其作为参数传递?

有没有办法自动装配需要经常重新实例化的对象?

我正在使用 Netflix 的 DGS + spring boot 框架,并且基本上将用户身份验证详细信息存储在为每个请求创建的自定义上下文中。由于需要大量重构,我试图避免将上下文添加到方法签名中。

例如

我正在考虑使用外观模式,但这不是线程安全的。基本上自动装配RequestContextHolder, 并在setRequestContext每次初始化新上下文时调用。

0 投票
1 回答
125 浏览

kotlin - 无法解决参考 Bigdecimal。但我添加了 ExtendedScalars

我在使用 netflix dgs 时遇到了一些问题。

我添加了一些类型 ExtendsScalar

日期、日期时间、GraphpQLLong.. 生成良好。

但是 GraphQLBigDecimal .. 我签入了这个生成的代码 - 未解决的参考:BigDecimal。因为它不是自动导入的。

这是我的 netflixe dgs 依赖版本

我想知道为什么 BigDecimal 不会自动导入。

0 投票
1 回答
248 浏览

java - 如何在以正确方式获取的事务之外初始化延迟加载的集合?

我有一个 Spring Boot 应用程序,它使用 Hibernate 作为 ORM 和DGS 框架作为 graphql 引擎。我一直在努力寻找以正确方式初始化延迟加载集合的方法。我有以下情况:

我的User数据提取器看起来像这样:

UserService看起来像这样:

现在,我只想在用户在 graphql 查询中请求时从数据库中初始化/加载我的文章集合。为此,我为我的文章创建了一个子解析器,它仅在用户在查询中请求文章时执行。我UserDataFetcher开始看起来像这样:

但是,上面开始抛出异常,告诉我 Hibernate 找不到上述请求的打开会话。这是有道理的,因为没有,所以我@Transactional在我的孩子解析器上放了一个,它开始看起来像这样:

但是,上述方法也不起作用。我也尝试将其@Transactional移至我的服务层,但即使那样它也不起作用,并且引发了相同的异常。经过深思熟虑,我发现(也许)Hibernate.initialize(...)只有在我在初始交易中调用它时才有效,这首先让我获得了我的用户。意思是,这对我没有用,因为我的用例是非常受用户驱动的。我只想在我的用户要求时得到它,而且它总是在我的应用程序的父事务之外的其他部分中。

我正在寻找以下解决方案:

  1. 将子解析器更改为以下内容:

我不赞成上述解决方案,因为我觉得这是通过尝试自己解决关系而不是让 hibernate 自己来解决关系而未充分利用 ORM 本身。(如果我这样想错了,请纠正我)

  1. 将我的User实体更改为使用FetchMode.JOIN.

这与告诉 hibernate 无论如何都急切地加载下面的集合是一样的。我也不想要这个。

  1. 设置spring.jpa.open-in-view=falsespring.jpa.open-in-view=true。也不赞成这个,因为这只是一个创可贴LazyInitializationExceptions

  2. LazyInitializationException通过在请求的整个生命周期中保持会话打开来让您忘记的任何其他解决方案。