我们在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中是否有办法回滚订阅。
欢迎提出任何改进建议。
答案 0 :(得分:2)