egg-liteflake
v1.1.5
Published
Egg plugin to generate unique and increased twitter-snowflake uuid.
Downloads
2
Maintainers
Readme
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