@gromo-fintech/nestjs-central-locking
v0.0.4
Published
A NestJS library for distributed locking using Redlock and Redis.
Downloads
18
Readme
Central Locking
A NestJS library for distributed locking using Redis. This package helps you manage distributed locks in a NestJS application, ensuring that only one instance of a process runs at a time.
Table of Contents
Installation
To install the package, use npm or yarn:
npm install @gromo-fintech/central-locking-service
or
yarn add @gromo-fintech/central-locking-service
Usage
Setup
First, import the LockingModule
into your NestJS application module:
import { Module } from '@nestjs/common';
import { LockingModule } from 'central-locking-service';
@Module({
imports: [LockingModule],
})
export class AppModule {}
Using the Locking Decorator
You can use the CentralLock
decorator to ensure a method acquires a lock before execution. This is useful for scenarios where only one instance of a method should run at a time across distributed systems.
import { CentralLock, LockingService } from 'central-locking-service';
export class SomeService {
constructor(private lockingService: LockingService) {}
@CentralLock({
lockKey: 'unique-lock-key',
lockDuration: 10000,
shouldReleaseAfterExecution: true,
shouldThrowErrorIfUnableToAcquireLock: true,
})
async handleTask() {
console.log('Task is being handled.');
// Your business logic here
}
}
API
CentralLock Decorator
The CentralLock
decorator is used to manage distributed locks on methods.
Options:
lockKey
(string): The key to identify the lock.lockDuration
(number): The duration (in milliseconds) for which the lock should be held.shouldReleaseAfterExecution
(boolean): Whether to release the lock after method execution.shouldThrowErrorIfUnableToAcquireLock
(boolean): Whether to throw an error if unable to acquire the lock.
LockingService
The LockingService
provides methods to acquire and release locks.
Methods:
acquireLock(key: string, duration: number): Promise<void>
: Acquires a lock for a specific duration.releaseLock(key: string): Promise<void>
: Releases the lock for the specified key.
Contributing
Contributions are welcome! Please submit a pull request or open an issue to discuss any changes or improvements.
- Fork the repository.
- Create your feature branch:
git checkout -b feature/your-feature
- Commit your changes:
git commit -m 'Add some feature'
- Push to the branch:
git push origin feature/your-feature
- Open a pull request.
Author
Saket Anand
Lead Engineer
Saket Anand is the lead engineer behind the @gromo-fintech/nestjs-central-locking
. With a deep focus on leveraging Redis, his work has been central to the efficient central locking provided by this library.