Vertx网站和graphql

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

我想澄清几个查询。

  1. 我们正在部署该顶点的多个实例(20),这将创建GraphQLHandler的多个实例。可以吗?还是应该仅使用GraphQLHandler的一个实例?
// Inside the constructor of the verticle
this.graphQLHandler = GraphQLHandler.create(createGraphQL(), new GraphQLHandlerOptions().setRequestBatchingEnabled(true));
private GraphQL createGraphQL() {
        log.info("**** Loading the graphQL schema ****");
        String schema = vertx.fileSystem().readFileBlocking("tetris.graphqls").toString();
        SchemaParser schemaParser = new SchemaParser();
        TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
        RuntimeWiring runtimeWiring = newRuntimeWiring()
                .wiringFactory(new WiringFactory() {
                    @Override
                    public DataFetcher getDefaultDataFetcher(FieldWiringEnvironment environment) {
                        return new VertxPropertyDataFetcher(environment.getFieldDefinition().getName());
                    }
                })
                .scalar(ScalarDataTypes.instantScalar)
                .scalar(ExtendedScalars.Json)
                .type("Query", builder -> {
                    VertxDataFetcher<JsonObject> getArrangementDetailsByLegacyCodeAndEffectiveDate = new VertxDataFetcher<>(this::getArrangementDetailsByLegacyCodeAndEffectiveDate);
                    return builder
                            .dataFetcher("getArrangementDetailsByLegacyCodeAndEffectiveDate", getArrangementDetailsByLegacyCodeAndEffectiveDate);

                })
                .build();
        SchemaGenerator schemaGenerator = new SchemaGenerator();
        GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
        return GraphQL.newGraphQL(graphQLSchema).build();
    }
  1. 我们正在使用rxjava来获取结果并返回promise。当我们返回承诺时,执行是在rxjava线程上进行的。我们想将其移动到事件循环。如何实现。
private void getArrangementDetailsByLegacyCodeAndEffectiveDate(DataFetchingEnvironment dataFetchingEnvironment, Promise<JsonObject> promise) {
 Scheduler scheduler = RxHelper.scheduler(vertx.getOrCreateContext());

 Handler<AsyncResult<JsonObject>> resultHandler = handler -> {
                if (handler.succeeded()) {
                    promise.complete(handler.result());
                } else {
                    log.error(new LogEvent("graphql_subscribe_error", traceId).addThrowable(handler.cause()).toString());
                    promise.fail(handler.cause());
                }
            };

 getArrangementsFlowable.
   ...
  .subscribeOn(scheduler)
  .subscribe(SingleHelper.toObserver(resultHandler));

}

日志:

01:04:05.520 [RxCachedThreadScheduler-3] DEBUG graphql.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' completing field '/getArrangementDetailsByLegacyCodeAndEffectiveDate'...
01:04:05.520 [RxCachedThreadScheduler-3] DEBUG graphql.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' fetching field '/getArrangementDetailsByLegacyCodeAndEffectiveDate/effective_timestamp' using data fetcher 'io.vertx.ext.web.handler.graphql.VertxPropertyDataFetcher'...
01:04:05.520 [RxCachedThreadScheduler-3] DEBUG n.g.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' field '/getArrangementDetailsByLegacyCodeAndEffectiveDate/effective_timestamp' fetch returned 'java.lang.String'
01:04:05.520 [RxCachedThreadScheduler-3] DEBUG graphql.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' completing field '/getArrangementDetailsByLegacyCodeAndEffectiveDate/effective_timestamp'...
01:04:05.520 [RxCachedThreadScheduler-3] DEBUG graphql.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' fetching field '/getArrangementDetailsByLegacyCodeAndEffectiveDate/end_timestamp' using data fetcher 'io.vertx.ext.web.handler.graphql.VertxPropertyDataFetcher'...
01:04:05.520 [RxCachedThreadScheduler-3] DEBUG n.g.execution.ExecutionStrategy - '70fad529-b19b-426a-8f7c-82a4a3d0b9ea' field '/getArrangementDetailsByLegacyCodeAndEffectiveDate/end_timestamp' fetch returned 'java.lang.String'
rx-java2 vert.x graphql-java
1个回答
1
投票
  1. 创建GraphQLHandler的多个实例很好>
  2. 为了获得在事件循环上处理的项目,请使用observeOn运算符,而不是subscribeOn
© www.soinside.com 2019 - 2024. All rights reserved.