详解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 创建对象和构造类实现代码
Jul 30 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
Jan 06 Javascript
js常用自定义公共函数汇总
Jan 15 Javascript
jQuery给动态添加的元素绑定事件的方法
Mar 09 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
json+jQuery实现的无限级树形菜单效果代码
Aug 27 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
layui导出所有数据的例子
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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
PHP处理会话函数大总结
2015/08/05 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
Python字符串替换实例分析
2015/05/11 Python
python中enumerate函数用法实例分析
2015/05/20 Python
Python 字典与字符串的互转实例
2017/01/13 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
《望洞庭》教学反思
2014/02/16 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
七匹狼男装广告词
2014/03/21 职场文书
大学生就业自荐书
2014/06/16 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Python采集壁纸并实现炫轮播
2022/04/30 Python