fontcolor_theme
Deepkit Broker

Broker 원자적 Lock

Deepkit Broker Locks는 여러 프로세스나 머신 전반에서 원자적 lock을 생성하는 간단한 방법입니다.

동시에 오직 하나의 프로세스만 특정 코드 블록을 실행하도록 보장하는 간단한 방법입니다.

사용법

import { BrokerLock } from '@deepkit/broker';

const lock = new BrokerLock(adapter);

// lock은 60초 동안 유효합니다.
// 획득 timeout은 10초입니다.
const myLock = lock.item('my-lock', { ttl: '60s', timeout: '10s' });

async function criticalSection() {
  // 함수가 끝날 때까지 lock을 유지합니다.
  // 함수가 에러를 던져도 lock을 자동으로 정리합니다.
  await using hold = await lock1.hold();
}

이 lock은 명시적 리소스 관리를 지원하므로, lock을 제대로 해제하기 위해 try-catch 블록을 사용할 필요가 없습니다.

lock을 수동으로 획득하고 해제하려면 acquirerelease 메서드를 사용할 수 있습니다.

// lock을 획득할 때까지 대기합니다.
// 또는 timeout에 도달하면 예외를 던집니다
await myLock.acquire();

try {
  // 중요한 작업 수행
} finally {
  await myLock.release();
}

앱에서의 사용

애플리케이션에서 BrokerLock을 사용하는 전체 예제입니다. FrameworkModule을 import하면 이 Class는 의존성 주입 컨테이너에서 자동으로 사용 가능합니다. 자세한 내용은 Getting started 페이지를 참고하세요.

import { BrokerLock, BrokerLockItem } from '@deepkit/broker';
import { FrameworkModule } from '@deepkit/framework';

// 이 Type을 공유 파일로 이동하세요
type MyCriticalLock = BrokerLockItem;

class Service {
  constructor(private criticalLock: MyCriticalLock) {
  }

  async doSomethingCritical() {
    await using hold = await this.criticalLock.hold();
    
    // 중요한 작업 수행,
    // lock은 자동으로 해제됩니다
  }
}

const app = new App({
  providers: [
    Service,
    provide<MyCriticalLock>((lock: BrokerLock) => lock.item('my-critical-lock', { ttl: '60s', timeout: '10s' })),
  ],
  imports: [
    new FrameworkModule(),
  ],
});
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)