Мы используем 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 откатить подписку после задержки или тому подобное ..
Любые идеи по улучшению приветствуются.