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