Периодически обновляйте кэш iplookUp исходным файлом базы данных. - PullRequest
1 голос
/ 05 июня 2019

Я хочу создать кеш для iplookups из файла базы данных maxmind GeoIP-City.mmdb. Проблема в том, что если мое приложение работает и исходная база данных обновляется с помощью maxmind, как мой код будет получать обновленное содержимое файла без перезапуска?

Код, который читает данные из файла maxmind:

val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
    Some(geoFilePath),
    None,
    None,
    None,
    false,
    20000
  )

теперь в ipLookups есть данные для IP-адреса и отображения города. Как обновить его автоматически, когда мое приложение работает

1 Ответ

0 голосов
/ 06 июня 2019

Вы можете использовать библиотеку fs2-cron https://github.com/fthomas/fs2-cron

case class Look() {
    val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
    Some(geoFilePath),
    None,
    None,
    None,
    false,
    20000)
}

import cats.effect.{IO, Timer}
import cron4s.Cron
import eu.timepit.fs2cron.awakeEveryCron
import fs2.Stream
import scala.concurrent.ExecutionContext

implicit val timer: Timer[IO] = IO.timer(ExecutionContext.global)


val cron      = Cron.unsafeParse("*/2 * * ? * *")
val scheduled = awakeEveryCron[IO](cron) >> Stream.eval(IO(Look()))
scheduled.compile.drain.unsafeRunAsyncAndForget()
...