1

我们正在使用 Sangria Graphql 来处理中继查询。从 UI 获取查询的 Graphql 代码生成一条 kafka 消息,适当的微服务使用并处理它,然后将消息发布到 Graphql 代码使用的 kafka。问题是我们的graphql消费者如何将结果映射到原始请求并将其发送回客户端?

val StoreType = ObjectType("Store", List[Field[UserRepo, Unit]](

Field("cart", Cart,
  arguments = cart_id :: user_id :: sku_id :: quantity :: price :: operation :: Nil,
  resolve = c ⇒ c.ctx.callCartService(c arg cart_id, c arg user_id, c arg sku_id, c arg quantity,c arg price, c arg operation))

))

callCartService 将向 kafka 生成消息以发送到购物车微服务,该微服务会将购物车消息发送回 kafka 以供 Graphql 使用。

QueryParser.parse(query) match {

          // query parsed successfully, time to execute it!
          case Success(queryAst) =>
            complete(Executor.execute(SchemaDefinition.schema, queryAst, new UserRepo,
              variables = vars,
              operationName = operation
            ))

          // can't parse GraphQL query, return error
          case Failure(error) =>
            complete(BadRequest, JsObject("error" -> JsString(error.getMessage)))
        }
      }

有没有办法等待消费者阅读购物车消息并返回给客户端?

4

0 回答 0