nodejs bull 实现延时队列

摘要:
公牛jsconstQueue=require('bull');constqueue=newQueue('ike',{redis:{port:6379,主机:'127.0.0.1',db:3,密码:null},前缀:'ike_',defaultJobOptions:{尝试次数:1,removeOnComplete:true,回退:false,del

bull.js

const Queue = require('bull');
const queue = new Queue('nike', {
  redis: {
    port: 6379,
    host: '127.0.0.1',
    db: 3,
    password: null
  },
  prefix: 'nike_',
  defaultJobOptions: {
    attempts: 1,
    removeOnComplete: true,
    backoff: false,
    delay: 0
  },
  limiter: {
    max: 200000,
    duration: 1000
  },
  settings: {
    maxStalledCount: 1,
    guardInterval: 1, // 重新调度延迟
    retryProcessDelay: 500, // delay before processing next job in case of internal error.
  // drainDelay: 50000 // 空队列时brpoplpush的等待时间
  }
});
module.exports = queue;

生产者

const queue = require('./bull');
const random = require("random-string")
var log4js = require("log4js");
var logger = log4js.getLogger();
logger.level = "info";
queue.on('global:progress', function(jobId, progress) {
  logger.info(`Job ${jobId} is ${progress * 100}% ready!`);
});
queue.on('global:completed', jobId => {
  logger.info(`Job with id ${jobId} has been completed`);
})
const  main = async () => {
  for(let i=0;i<10;i++){
    const job = await queue.add({
      key: random(10)
    },{
      delay:5000
    });
    logger.info("生产者:",job.data,await queue.count())
  }
}
main()

消费者

const queue = require('./bull');
var log4js = require("log4js");
var logger = log4js.getLogger();
logger.level = "info";
const  main = async () => {
  queue.process(async (job) => {
    logger.info('消费者:',job.data);
     await new Promise(r => setTimeout(r,1000))
    return Promise.resolve();
  });
}
main()

 nodejs bull 实现延时队列第1张

 nodejs bull 实现延时队列第2张

 文档:

https://github.com/OptimalBits/bull/tree/develop/docs

api:

https://github.com/OptimalBits/bull/blob/master/REFERENCE.md#queueprocess

免责声明:文章转载自《nodejs bull 实现延时队列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL to_char,to_date日期字符串转换问题苹果维修网点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac中如何搭建Vue项目并利用VSCode开发

(一)部署Node环境 (1)下载适合Mac环境的Node包,点击进入下载页面 (2)安装Node环境:找到下载好的Node包,这里是node-v12.14.1.pkg,我们双击它,会进入Node.js安装器界面,如下图所示: 我们只要一直点击继续按钮即可,采用默认设置,安装成功后最终的效果图如下图所示: 默认是安装了npm,我们可以在终端中输入nod...

zookeeper(二):linux centos下安装zookeeper(单机和集群)

下载 http://zookeeper.apache.org/releases.html 解压 tar –zxvf zookeeper-3.4.6.tar.gz 解压文件到"/usr/local/zookeeper-3.4.6". 复制conf目录下的zoo_sample.cfg,并命名为zoo.cfg 修改zoo.cfg配置文件 # The number...

数据结构基础温故-4.树与二叉树(下)

上面两篇我们了解了树的基本概念以及二叉树的遍历算法,还对二叉查找树进行了模拟实现。数学表达式求值是程序设计语言编译中的一个基本问题,表达式求值是栈应用的一个典型案例,表达式分为前缀、中缀和后缀三种形式。这里,我们通过一个四则运算的应用场景,借助二叉树来帮助求解表达式的值。首先,将表达式转换为二叉树,然后通过先序遍历二叉树的方式求出表达式的值。 一、二叉树如...

unity行为树简介

目前在Unity3D游戏中一般复杂的AI都可以看到行为树的身影,简单的AI使用状态机来实现就可以了,所以这里我也是简单的学习下,为以后用到做准备。 行为树的概念出现已经很多年了,总的来说,就是使用各种经典的控制节点+行为节点进行组合,从而实现复杂的AI。 Behavior Designer插件里,主要有四种概念节点,都称之为Task。包括: (1)Comp...

react-native常见错误整理

更多内容参见个人技术博客,无广告欢迎关注 1、CFBundleIdentifier", Does Not Exist sudo rm -rf node_modules && rm -rf ~/.rncache && yarn sudo npm install -g react-native-git-upgrade 2、B...

使用 Elastic 技术栈构建 Kubernetes全栈监控

以下我们描述如何使用 Elastic 技术栈来为 Kubernetes 构建监控环境。可观测性的目标是为生产环境提供运维工具来检测服务不可用的情况(比如服务宕机、错误或者响应变慢等),并且保留一些可以排查的信息,以帮助我们定位问题。总的来说主要包括3个方面: 监控指标提供系统各个组件的时间序列数据,比如 CPU、内存、磁盘、网络等信息,通常可以用来显示系...