详解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 相关文章推荐
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
Angular实现form自动布局
Jan 28 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
微信小程序进入广告实现代码实例
Sep 19 Javascript
JavaScript单线程和任务队列原理解析
Feb 04 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自动注册登录验证机制实现代码
2011/12/20 PHP
php绘制一条弧线的方法
2015/01/24 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
node.js中的console.error方法使用说明
2014/12/10 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python3 log10()函数简单用法
2019/02/19 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
numpy.array 操作使用简单总结
2019/11/08 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
美国休闲服装品牌:Express
2016/09/24 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
省级青年文明号申报材料
2014/05/23 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
行政二审代理词
2015/05/25 职场文书
工程进度款催款函
2015/06/24 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技
Redis 限流器
2022/05/15 Redis