Redis health check

Většinou není problém s připojením k redis databázi. Ani když používáte docker image a contejner s redisem zastavíte. Po jeho spuštění se aplikace zase korektně připojí do redis databáze. Měl jsem ale problém v případě kubernetu, kdy po znovu nasazení a spuštění docker kontejneru s redisem se aplikace nemohla sama připojit. Řešením bylo udělat health actuator a v případě, že je down, aplikaci restartovat. Jako klienta používám redisson.

import org.redisson.api.RedissonClient
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.actuate.health.Health
import org.springframework.boot.actuate.health.ReactiveHealthIndicator
import org.springframework.stereotype.Component
import reactor.core.publisher.Mono

@Component
class RedisHealthChecker : ReactiveHealthIndicator {
    private val log = LoggerFactory.getLogger(RedisHealthChecker::class.java)

    @Autowired
    lateinit var redissonClient: RedissonClient

    override fun health(): Mono {
        return try {
            val bucket = redissonClient.getBucket("healthBucket")
            bucket.set("Ok")
            Mono.just(Health.Builder().up().build())
        } catch (e: Exception) {
            log.error("Error in redis connection", e)
            Mono.just(Health.Builder().down().build())
        }
    }
}

Napsat komentář