1.1.5 • Published 6 years ago

egg-liteflake v1.1.5

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

Build Status Coverage

egg-liteflake

Egg plugin to generate unique and increased twitter-snowflake uuid.

egg-liteflake will first assign a unique worker id to each worker by using the IPC messaging, and then create uuid according to the twitter snowflake algorithm.

Install

$ npm install egg-liteflake

Configurations

config/plugin.js

exports.liteflake = {
  enable: true,
  package: 'egg-liteflake'
}

config/config.default.js

// |--- timestamp ---|- machine -|- worker -|-- serial --|
// |----- 31 bit ----|---- 6 ----|--- 4 ----|---- 12 ----|
// |                 |           |          |            |
//  00000000000000000    000001      0000    000000000000

exports.liteflake = {
  client: {
    machineId: 1,
    // `Number` if 6-bit length (the default value),
    // we could handle servers from `2 ** 6` different machines.
    // And if 0, there will be no machine id in the uuid
    machineIdBitLength: 6,
    workerIdBitLength: 4,
    // Could handle max 4096 requests per millisecond
    serialIdBitLength: 12
  }
}

Then:

...
  async doSomething () {
    const {liteflake} = this.app

    const uuid = await liteflake.uuid()
    console.log(uuid)
    // '6465404975054230'

    const workerId = await liteflake.index()
    console.log(workerId)
    // 0
  }
...

await liteflake.uuid()

Generates the unique and time-based id across workers (/ machines)

Returns String | Promise<String> instead of Number due to the bad accuracy of JavaScript.

The bit-length of the return value equals to:

31 + machineIdBitLength + workerIdBitLength + serialIdBitLength

So you could use the three configuration options to handle the length of uuids.

await liteflake.index()

Returns String | Promise<Number> the 0-index unique worker id of the current cluster.

License

MIT