distributed-weighted-queue

1.0.1 • Public • Published

distributed-weighted-queue

purpose

To have a weighted queue in a distributed mantor
You can set shards and each shard can have a different prioity

Example: weights: [10, 3, 2, 1],
First shard with weight of 10 will be 10x more likely to
return its item when you request the next item over the last shard

requirements

node >6
redis-server

Example

const WeightedList = require('distributed-weighted-queue');
const config = {
  redis: {
    host: 'localhost',
    port: 6379,
  },
  maxSize: 1000000, // optional but will default to a value
  baseKey: 'mylists', // optional will default to a value
  weights: [10, 3, 2, 1],
};
 
const list = new WeightedList(config);
 
list.on('size_change', (size) => {
  console.log(`size ${size}`);
});
 
function getRandomShard() {
  return Math.floor(Math.random() * config.weights.length);
}
 
function put(count) {
  if (count === 0) {
    return;
  }
 
  const shard = getRandomShard();
  list.put(shard, (shard + 1) * 100, () => {
    put(--count);
  });
}
 
put(1000);
 
function get(count) {
  if (count === 0) {
    return;
  }
 
  count += -1;
 
  list.get((err, data) => {
    console.log(`size=${list.getSize()} data=${data}`);
    process.nextTick(() => {
      get(count);
    });
  });
}
 
setTimeout(() => {
  get(1001);
}, 2000);

Package Sidebar

Install

npm i distributed-weighted-queue

Weekly Downloads

3

Version

1.0.1

License

ISC

Unpacked Size

11.4 kB

Total Files

9

Last publish

Collaborators

  • cyrus307