异步响应 HTTP

Async Response HTTP

提问人:Alexandr 提问时间:11/17/2023 最后编辑:possumAlexandr 更新时间:11/20/2023 访问量:56

问:

我们正在制作一个应该接受 HTTP 请求的服务。 此方法应将客户端数据发送到 Kafka“发送”主题,并暂时忘记它(但不是阻塞)

@GetMapping("/comp")
public Mono<ShareObj> handleRequest() {
    CompletableFuture<ShareObj> future = new CompletableFuture<>();
    ShareObj objectC = new ShareObj();
    objectC.setReq(UUID.randomUUID().toString());
    kafkaTemplate.send("send", objectC);
    futureMap.put(objectC.getReq(), future);
    return Mono.fromFuture(future);
}

读取发送主题中的数据,并将响应发送到“resp”主题。在我们有 @GetMapping(“/comp”) 的方法中,将有一个@KafkaListener来监听主题“resp”,我们需要从中为客户端获取数据。

@KafkaListener(topics = "resp", groupId = "consGroup")
public void listen(@Payload ShareObj req) {
    System.out.println(req);
    var future = futureMap.get(req.getReq());
    if (future != null) {
        future.complete(req);
        futureMap.remove(req.getReq());
    }
}

我想不出比 CompletableFuture 更好的方法来稍后返回响应。但是这里的吞吐量非常差。 你怎么能以另一种方式或一般的其他方法解决这个问题?

java spring-boot http spring-webflux

评论


答: 暂无答案