如何在Java Spring Boot应用程序中从kafka KSQL服务器接收分块响应?
当我对/query
端点进行休息呼叫时,我仅得到1行,并且连接关闭。如何保持连接打开并接收多行?
医生说
响应将被流回,直到在 语句到达,或客户端关闭连接。
用Java实现此目的的方法是什么?即使对于KTable,我也只能获得1行。
答案 0 :(得分:1)
我能够解决的方法如下:
逐行分析JSON对象(KafkaQueryResponse
是代表1行的对象)
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
KafkaQueryResponse
@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;
}
}
此解决方案不允许分块读取流式响应。它等待整个响应到达客户端,然后关闭连接,然后解析所有json对象。