详解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循环滚动图片代码
Dec 08 Javascript
intro.js 页面引导简单用法 分享
Aug 06 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 Javascript
vue实现简单学生信息管理
May 30 Javascript
javascript this指向相关问题及改变方法
Nov 19 Javascript
JavaScript实现显示和隐藏图片
Apr 29 Javascript
如何用JavaScript实现一个数组惰性求值库
May 05 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学习教程之第2天
2008/06/15 PHP
如何使用php输出时间格式
2013/08/31 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
iOS10推送通知开发教程
2016/09/19 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python文件及目录操作实例详解
2015/06/04 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python温度转换华氏温度实现代码
2020/12/06 Python
机械设计及其自动化专业推荐信
2013/10/31 职场文书
毕业生自荐信
2013/12/14 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
《口技》教学反思
2014/02/21 职场文书
年度评优评先方案
2014/06/03 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
《失物招领》教学反思
2016/02/20 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python