详解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 相关文章推荐
JSON序列化与解析原生JS方法且IE6和chrome测试通过
Sep 05 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
Feb 12 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
jquery append与appendTo方法比较
May 24 jQuery
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
详解js location.href和window.open的几种用法和区别
Dec 02 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
May 09 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
Oct 27 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
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
javascript 精粹笔记
2010/05/09 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
JS实现复制功能
2017/03/01 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python中List.index()方法的使用教程
2015/05/20 Python
Python切片操作深入详解
2018/07/27 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
Django 自定义分页器的实现代码
2019/11/24 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
普通大学毕业生自荐信范文
2014/02/23 职场文书
预防传染病方案
2014/06/14 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
党的作风建设心得体会
2014/10/22 职场文书
防暑降温通知书
2015/04/27 职场文书
2015年班干部工作总结
2015/04/29 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python