该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

GraphQL 支持

Spring Integration 提供通道适配器,用于与 GraphQL 协议交互。该实现基于 Spring for GraphQL 版本。spring-doc.cadn.net.cn

你需要把这种依赖性纳入你的项目中:spring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-graphql</artifactId>
    <version>6.3.12-SNAPSHOT</version>
</dependency>
compile "org.springframework.integration:spring-integration-graphql:6.3.12-SNAPSHOT"

GraphQL 出站网关

GraphQLMessageHandler摘要回复制作消息处理器表示执行 GraphQL 的出站网关合同的扩展查询,突变订阅运算并产生结果。它需要org.springframework.graphql.ExecutionGraphQlService执行操作,可以静态配置,也可以通过针对请求消息的 SpEL 表达式进行配置。 这作名称可选配置,也可以静态配置或通过 SpEL 表达式配置。 这变量表达式也是可选的,用于参数化运算。 这现场是可选的,用于GraphQL Java库中的作执行上下文。 这执行ID可以通过 SpEL 表达式配置,默认为身份证请求消息的头部。spring-doc.cadn.net.cn

如果请求消息的有效载荷是ExecutionGraphQlRequest那么,在GraphQLMessageHandler而这样的输入被用于ExecutionGraphQlService.execute(). 否则,操作,作名称,变量执行ID通过上述 SpEL 表达式来确定请求消息。spring-doc.cadn.net.cn

GraphQLMessageHandler是响应式流的分量,并产生单<执行图QlResponse>回复是因为ExecutionGraphQlService.execute(ExecutionGraphQlRequest). 这样的被框架订阅ReactiveStreamsSubscribeableChannel(可订阅频道)输出通道或在摘要消息制作处理程序当输出通道不响应时,异步进行。详见文档ExecutionGraphQlResponse如何处理GraphQL作结果。spring-doc.cadn.net.cn

@Bean
GraphQlMessageHandlerSpec graphQlMessageHandlerSpec(ExecutionGraphQlService graphQlService) {
    return GraphQl.gateway(graphQlService)
            .operation("""
                    query HeroNameAndFriends($episode: Episode) {
                      hero(episode: $episode) {
                        name
                        friends {
                          name
                        }
                      }
                    }""")
            .variablesExpression("{episode:'JEDI'}");
}

@Bean
IntegrationFlow graphqlQueryMessageHandlerFlow(GraphQlMessageHandler handler) {
    return IntegrationFlow.from(MessageChannels.flux("inputChannel"))
            .handle(handler)
            .channel(c -> c.flux("resultChannel"))
            .get();
}

@Bean
ExecutionGraphQlService graphQlService(GraphQlSource graphQlSource) {
    return new DefaultExecutionGraphQlService(graphQlSource);
}

@Bean
GraphQlSource graphQlSource(AnnotatedControllerConfigurer annotatedDataFetcherConfigurer) {
    return GraphQlSource.builder()
            .schemaResources(new ClassPathResource("graphql/test-schema.graphqls"))
            .configureRuntimeWiring(annotatedDataFetcherConfigurer)
            .build();
}

@Bean
AnnotatedControllerConfigurer annotatedDataFetcherConfigurer() {
    return new AnnotatedControllerConfigurer();
}

应对认购作的结果进行特殊处理。在这种情况下ExecutionGraphQlResponse.getData()返回 a订阅出版商该回复需要手动订阅和处理。或者通过纯服务激活器将其平面映射到回复流信息频道:spring-doc.cadn.net.cn

@ServiceActivator(inputChannel = "graphQlResultChannel", outputChannel="graphQlSubscriptionChannel")
public SubscriptionPublisher obtainSubscriptionResult(ExecutionGraphQlResponse graphQlResponse) {
	return graphQlResponse.getData();
}

这样的出站网关不仅可以通过HTTP进行GraphQL请求,也可以用于任何产生或携带GraphQL作或其参数的上游端点。结果GraphQLMessageHandler处理可以作为对上游请求的回复产生,也可以发送到下游进行集成流程的进一步处理。spring-doc.cadn.net.cn