带Redis的发布/订阅:如何使订阅过期

时间:2018-12-21 10:59:43

标签: java redis vert.x

我们在Java框架(vertx)中使用redis pub / sub来跟踪一些剩余调用。

为了不让Redis过载,我在30秒后取消订阅频道,如下所示:

private void subscribe(Message<String> message) {

    String msgId = message.body();
    redisClient.subscribe(msgId, result -> {
        if (!result.succeeded()) {
            log.warn("subscribe failed msgId={}", msgId, result.cause());
            message.fail(500, String.format("retrieve conversation %s failure", msgId));
            return;
        }

        log.info("subscribed for message id :{}", msgId);
        message.reply("OK");

        //unsubscribe after 30 seconds.
        vertx.setTimer(30000, r -> {
            redisClient.unsubscribe(Collections.singletonList(msgId), r2 -> {
                if(!r2.succeeded()){
                    log.warn("unsubscribe failed msgId={}", msgId, r2.cause());
                }
            });

        });
    });
}

我想知道在延迟或类似时间之后,redis中是否有办法回滚订阅。

欢迎提出任何改进建议。

1 个答案:

答案 0 :(得分:2)

不,没有。

根据文档:https://redis.io/commands/subscribe

您只能指定要收听的频道。您可以断开连接或发出UNSUBSCRIBE命令。