Pub / sub с Redis: как сделать так, чтобы срок действия подписки истек - PullRequest
0 голосов
/ 21 декабря 2018

Мы используем redis pub / sub в java framework (vertx) для отслеживания некоторых вызовов rest.

Чтобы не перегружать 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 голосов
/ 21 декабря 2018

Нет, нет.

Согласно документации: https://redis.io/commands/subscribe

Вы можете указать только те каналы, которые хотите прослушать.Вы либо отключаетесь, либо запускаете команду UNSUBSCRIBE.

...