详解Node.js amqplib 连接 Rabbit MQ最佳实践


Posted in Javascript onJanuary 24, 2019

客户端设置connection_name

在建立连接时,设置connection_name属性,可以在RabbitMQ Managerment 中查看到连接来自那个实例。

amqp.connect(rabbitMqAddress, {
  clientProperties: {
   connection_name: 'your host name'
  }
})

队列属性autoDelete durable

如无必要,建议将队列设置成自动删除,这个在TCP连接断开后,队列会自动删除。另外也不要使用持久化队列。

channel.assertQueue(queueName, {
  autoDelete: true,
  durable: false
})

connnection 和 channel管理

connnection的内存消耗。一个connection至少要使用100kb的内存空间,过多的connetion占用将会导致内存溢出,服务崩溃等问题。(我曾遇到过生产系统,RabbitMQ连接过多,系统一直处于崩溃边缘的险境)

重用connection或者channel,而不要重复开关,下面给出AMQP各个阶段所耗费的tcp包,重复的开关,将会导致

  • AMQP connections: 7 TCP packages
  • AMQP channel: 2 TCP packages
  • AMQP publish: 1 TCP package (more for larger messages)
  • AMQP close channel: 2 TCP packages
  • AMQP close connection: 2 TCP packages
Total 14-19 packages (+ Acks)

一个进程,一个channel, 一个connection,如果一个pod向RabbitMQ建立了多条tcp连接,你就要警惕了。

监控进程与RabbitMQ TCP连接数,将NodeJS的运行信息写入influxDB,并在grafana做监控和告警。其中tcp连接数可以使用shelljs执行命令获取。

function getRabbitMqConnnectionCount (params) {
 shell.exec(`netstat -nt | grep ${rabbitmqHost} | wc -l`, (code, stdout, stderr) => {
  try {
   if (code === 0) {
    rabbitMqConnnectionCount = parseInt(stdout) || 0
   }
  } catch (error) {
   log.error(error.message)
  }
 })
}

参考

https://www.cloudamqp.com/blog/2017-12-29-part1-rabbitmq-best-practice.html
https://www.cloudamqp.com/blog/2018-01-08-part2-rabbitmq-best-practice-for-high-performance.html
https://www.cloudamqp.com/blog/2018-01-19-part4-rabbitmq-13-common-errors.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
国外Lightbox v2.03.3 最新版 下载
Oct 17 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery中prepend()方法用法实例
Dec 25 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
jQuery实现简单的手风琴效果
Apr 17 jQuery
vue.js项目打包上线的图文教程
Nov 16 Javascript
Vue2.0子同级组件之间数据交互方法
Feb 28 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
Dec 05 Javascript
JavaScript私有变量实例详解
Jan 24 #Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 #Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 #Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 #jQuery
vue结合element-ui使用示例
Jan 24 #Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 #Javascript
JS实现带阴历的日历功能详解
Jan 24 #Javascript
You might like
用PHP来写记数器(详细介绍)
2006/10/09 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
django如何连接已存在数据的数据库
2018/08/14 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
中式餐厅创业计划书范文
2014/01/23 职场文书
教师自我反思材料
2014/02/14 职场文书
公司担保书格式范文
2014/05/12 职场文书
大学新生入学教育方案
2014/05/16 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
查摆问题整改措施
2014/10/24 职场文书
保密工作整改报告
2014/11/06 职场文书
学校百日安全活动总结
2015/05/07 职场文书
超市员工管理制度
2015/08/06 职场文书
靠谱的活动总结
2019/04/16 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫
利用Redis实现点赞功能的示例代码
2022/06/28 Redis