详解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里使用Dom操作Xml
Jan 22 Javascript
JavaScript触发器详解
Mar 10 Javascript
关于javascript DOM事件模型的两件事
Jul 22 Javascript
原生js实现查找/添加/删除/指定元素的class
Apr 12 Javascript
JQuery中对Select的option项的添加、删除、取值
Aug 25 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 Javascript
jQuery+formdata实现上传进度特效遇到的问题
Feb 24 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 Javascript
vue短信验证性能优化如何写入localstorage中
Apr 25 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
Aug 09 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
vue 虚拟DOM的原理
Oct 03 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
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
js性能优化技巧
2015/11/29 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
python+pyqt实现右下角弹出框
2017/10/26 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
女性时尚在线:IVRose
2019/02/23 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
趣味运动会策划方案
2014/06/02 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers