如何停止vertx线程?

nnvyjq4y  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(276)

所以情况是这样的:我正在使用vertxredis(我们以前使用的是莴苣)实现webapp的缓存。非常简单的机制,我们在端点上使用一个anotation,它负责调用redis客户机(无论我们使用什么实现),如果给定的密钥有缓存信息,它应该被用作响应主体,请求应该在没有处理的情况下完成。
但是vertx redis实现中有一个非常恼人的行为,即结束请求并不会停止处理。我发出请求,得到快速响应,因为有缓存的信息,但我仍然可以在日志中看到,应用程序继续处理,好像请求仍然打开。我相信这是因为我在redis客户端调用的处理程序中结束了响应,如下所示:

client.get("key", onResponse -> {
    if (onResponse.succeeded() && onResponse.result() != null) {
        //ending request from here
    }
});

我意识到,如果我能做这样的事情,我也许可以重现以前的行为:

String cachedInfo = client.get("key").map(onResponse -> onResponse.result());
// endResponse

但众所周知,vertx redis是一个语义api,每个方法都返回相同的redisclient示例。我也考虑过这样做:

private String cachedInfo; 

...

client.get("key", onResult -> {
    if (onResponse.succeeded()) {
        this.cachedInfo = onResponse.result();
    }
});

if (cachedInfo != null) { // The value could be unset since the lambda is running in other thread 
    //end request
}

真的不知道该怎么办,有没有办法将asyncresult的内容返回到一个变量,或者以某种方式将其同步设置为一个变量?我也一直在寻找某种方法来阻止当前请求的整个流程,但到目前为止还没有找到任何令人满意的、非攻击性的解决方案,但我也非常愿意接受这个选项。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题