详解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 相关文章推荐
js的写法基础分析
Jan 17 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
Sep 03 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
Dec 04 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 Javascript
微信小程序开发(二)图片上传+服务端接收详解
Jan 11 Javascript
老生常谈jquery中detach()和remove()的区别
Mar 02 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
详解VUE里子组件如何获取父组件动态变化的值
Dec 26 Javascript
js实现自定义滚动条的示例
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
php adodb介绍
2009/03/19 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
JS模块与命名空间的介绍
2013/03/22 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
Python列表推导式的使用方法
2013/11/21 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
资源环境与城市管理专业推荐信
2013/11/30 职场文书
大班开学家长寄语
2014/04/04 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
初中毕业感言300字
2015/07/31 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏