@theprodev/nest-lock

v0.1.0
Distributed Lock for NestJS Applications
nodejs lock mutex semaphore redis dicedb distributed-systems distributed-lock microservices and 3 more...

Nest Lock

Sponsor Node LTS Npm Version Weekly Downloads Dependents Minified Zipped Size Code Coverage Types License Open Issues Closed Issues Open Pulls Closed Pulls Contributors Activity

Description

A Redis-backed Lock Module for NestJS Applications.

Accessing a shared resource (e.g., Database Connections, Files, Load-constrained Services etc.) in the Distributed Workloads, Horizontal Scaling and Microservices, we often have to execute the request in a Mutual Exclusion zone. The required Locking Mechanism needs to be distributed in nature and accessible from each service, i.e., it cannot live within a Process Map or In-memory of a running instance. This module aims to simplify acquiring and releasing such Locking Mechanism with ease for Nest Applications in Web Backend.

Installation

Install this package using your preferred package manager. See the example of yarn:

yarn add @theprodev/nest-lock

Usage

Most common usage entails defining and configuring the LockModule using a predefined global module ConfigModule and use appropriate configuration options to pass on to this module.

  • In app.module.ts:

    import { LockModule } from "@theprodev/nest-lock";
    
    @Module({
      imports: [
        LockModule.forRootAsync({
          imports: [ConfigModule],
          inject: [ConfigService],
          useFactory: (cfg: ConfigService) => cfg.lockOptions,
        }),
      ],
    })
    export class AppModule {}
    
  • In app.service.ts:

    import { InjectLock, Lock } from "@theprodev/nest-lock";
    
    @Injectable()
    export class AppService {
      constructor(
        private readonly httpService: HttpService,
        @InjectLock() private readonly lock: Lock,
      ) {}
    
      async getHello(): Promise<string> {
        try {
          return await this.lock.execute("appService", () => "Hello World!", {
            ttl: 1000,
          });
        } catch (err) {
          console.log((err as any).cause);
          return "Bye World!";
        }
      }
    }
    

For any further usage, refer to the Type Declaration shipped with the package. Make sure your editor or IDE is capable of powering intellisense from the declaration file provided.

Testing

  • To run all the unit test suites, run the following after all the dependencies have been installed:
yarn test
  • To collect coverage on the tested files, execute the following command:
yarn test:cov

Reporting a Bug

Head on to Discussion section to report a bug or to ask for any feature. Feel to add your queries about using this library as well under Q & A section of it. Remember, do not create any Issues by yourself, maintainers of this repository will open one if deemed necessary.

Changelog

See CHANGELOG for more details on what has been changed in the latest release.

Contributing

See Contributing Guidelines.

License

This project is licensed under the terms of the MIT license, see LICENSE for more details.

The Pro Dev
npm i @theprodev/nest-lock

Metadata

  • MIT
  • >= 20
  • Progyan Bhattacharya
  • released 10/18/2024

Downloads

Maintainers