如何将回调转换为 Promise

How to Convert callback to a Promise

我正在使用 play 框架和 Apache Kafka。

我有一个 POST 方法可以向 Kafka 发送消息。 Kafka 有一个 API 方法

public java.util.concurrent.Future发送(ProducerRecord记录, 回调回调)

其中 Javadoc 说

Asynchronously send a record to a topic and invoke the provided callback when the send has been acknowledged.

我正在使用 play 框架公开此功能。我想从 Controller 方法 return a Promise<Result> 但不知道如何以非阻塞方式实现它。有人可以帮我解决这个问题吗?

经过一番搜索,在 的帮助下找到了答案。

代码如下

RedeemablePromise<Result> promise = RedeemablePromise.empty();

kafkaProducer.send(record, (metadata, ex) -> {
    if (ex != null) {
        promise.failure(ex);
    } else {
        promise.success(created(Json.toJson(new ProduceResult())));
    }
});