This package has been deprecated

Author message:

do not use this package since it only works for cluster mode of egg with agent which is not a best practice nowadays.

egg-snowflake
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

Build Status Coverage

egg-snowflake

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

egg-snowflake 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-snowflake

Configurations

config/plugin.js

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

config/config.default.js

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

exports.snowflake = {
  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 {snowflake} = this.app

    const uuid = await snowflake.uuid()
    console.log(uuid)
    // '6352534847126241280'

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

await snowflake.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:

41 + machineIdBitLength + workerIdBitLength + serialIdBitLength

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

await snowflake.index()

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

License

MIT

Package Sidebar

Install

npm i egg-snowflake

Weekly Downloads

1

Version

1.2.0

License

MIT

Unpacked Size

8.16 kB

Total Files

7

Last publish

Collaborators

  • kael