详解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温习篇 强大的JQuery选择器
Apr 24 Javascript
关于Mozilla浏览器不支持innerText的解决办法
Jan 01 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
jQuery EasyUI Panel面板组件使用详解
Feb 28 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 Javascript
Vue filter介绍及详细使用
Apr 04 Javascript
vue中使用mxgraph的方法实例代码详解
May 17 Javascript
layui使用数据表格实现购物车功能
Jul 26 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 jQuery
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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JS打印组合功能
2016/08/04 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
vue中多个倒计时实现代码实例
2019/03/27 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python冲顶大会 快来答题!
2018/01/17 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
python提取log文件内容并画出图表
2019/07/08 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
行政专员岗位职责
2014/01/02 职场文书
学生评语大全
2014/04/18 职场文书
经管应届生求职信范文
2014/05/18 职场文书
信息合作协议书
2014/10/09 职场文书
2015年企业新年寄语
2014/12/08 职场文书
优秀班主任材料
2014/12/16 职场文书
指导教师推荐意见
2015/06/05 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书