详解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节点访问兼容问题
Nov 26 Javascript
js中数组Array的一些常用方法总结
Aug 12 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
javascript实现完美拖拽效果
May 06 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
js实现砖头在页面拖拉效果
Nov 20 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
原生js二级联动效果
Jun 20 Javascript
Vue实现点击后文字变色切换方法
Feb 11 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
vue实现表格合并功能
Dec 01 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
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关联模型操作实例分析
2012/09/23 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
2014年小学教师工作总结
2014/11/10 职场文书
小学生交通安全寄语
2015/02/27 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS