详解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 相关文章推荐
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
实现div滚动条默认最底部以及默认最右边的示例代码
Nov 15 Javascript
vue通过路由实现页面刷新的方法
Jan 25 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
微信小程序背景音乐开发详解
Dec 12 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 Javascript
vue 导出文件,携带请求头token操作
Sep 10 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中检查文件或目录是否存在的代码小结
2012/10/22 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
微信access_token的获取开发示例
2015/04/16 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
Python中的pprint折腾记
2015/01/21 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
用python找出那些被“标记”的照片
2017/04/20 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Django 大文件下载实现过程解析
2019/08/01 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
python实现批处理文件
2020/07/28 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
美国网上书店:Barnes & Noble
2018/08/15 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
土木工程专业自荐信
2013/10/04 职场文书
法学院方阵解说词
2014/01/29 职场文书
趣味运动会广播稿
2014/09/13 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
国庆庆典邀请函
2015/02/02 职场文书
创业计划书之烤红薯
2019/09/26 职场文书