Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在春季卡夫卡中接收来自KSQL的流式响应?_Java_Apache Kafka_Ksqldb - Fatal编程技术网

Java 如何在春季卡夫卡中接收来自KSQL的流式响应?

Java 如何在春季卡夫卡中接收来自KSQL的流式响应?,java,apache-kafka,ksqldb,Java,Apache Kafka,Ksqldb,如何在JavaSpringBoot应用程序中从kafka KSQL服务器接收分块响应 当我对/query端点进行rest调用时,我只得到一行,连接关闭。如何保持连接打开并接收多行 医生说 响应被流回,直到中指定的限制 语句,或者客户端关闭连接 用java实现这一点的方法是什么?即使对于KTable,我也只能得到1行作为回报 我解决问题的方法如下: 以字符串形式获取响应 逐行解析JSON对象(KafkaQueryResponse是表示一行的对象) 此解决方案不允许以块的形式读取流式响应。它等待整

如何在JavaSpringBoot应用程序中从kafka KSQL服务器接收分块响应

当我对
/query
端点进行rest调用时,我只得到一行,连接关闭。如何保持连接打开并接收多行

医生说

响应被流回,直到中指定的限制 语句,或者客户端关闭连接

用java实现这一点的方法是什么?即使对于KTable,我也只能得到1行作为回报


我解决问题的方法如下:

  • 以字符串形式获取响应
  • 逐行解析JSON对象(
    KafkaQueryResponse
    是表示一行的对象)

    此解决方案不允许以块的形式读取流式响应。它等待整个响应到达客户端,然后关闭连接,然后解析所有json对象

        ResponseEntity<String> result = template.exchange("/query",
            HttpMethod.POST,
            new HttpEntity<>(params, headers),
            String.class);
    
        List<KafkaQueryResponse> array = new ArrayList<>();
        JsonFactory jsonFactory = new JsonFactory();
        try(BufferedReader br = new BufferedReader(new StringReader(result.getBody()))) {
            Iterator<KafkaQueryResponse> value = objectMapper.readValues(jsonFactory.createParser(br), KafkaQueryResponse.class);
            value.forEachRemaining(e -> {
                if (e.getRow() != null) {
                    array.add(e);
                }
            });
        }
        array <----  this is the list of JSON objects
    
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public class KafkaQueryResponse {
            private KafkaQueryRow row;
            private String finalMessage;
            private String errorMessage;
    
            @Data
            @JsonIgnoreProperties(ignoreUnknown = true)
            public static class KafkaQueryRow {
                private List<Object> columns;
            }
        }