잡다한 기술
[zookeeper] zookeeper에서 semaphore 사용하기
코딩하는동자
2021. 12. 31. 22:26
보통 zookeeper는 분산 작업을 제어하기 위한 트리 형태의 데이터 저장소로 kafka broker를 관리하는 용도로 많이 사용한다.
하지만 이런 기능 외에도 semaphore를 관리하는 서버의 용도로도 사용할 수 있다.
예제는 다음과 같다.
val zookeeperClient: CuratorFramework = CuratorFrameworkFactory.newClient(s"${conf.host}:${conf.port}", new ExponentialBackoffRetry(1000, 3))
client.start()
val maxSemaphoreNum = 5 // 5개 까지 허용
val semaphore: InterProcessSemaphoreV2 = new InterProcessSemaphoreV2(zookeeperClient, "/my/semaphore/directory", ${maxSemaphoreNum})
val lease: Lease = semaphore.acquire()
... // semaphore 획득 후 수행할 task
semaphore.returnLease(lease)
zookeeperClient.close()