详解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调用客户端的可执行文件(示例代码)
Nov 28 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
Jun 15 Javascript
详解JavaScript编程中正则表达式的使用
Oct 25 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
纯JavaScript手写图片轮播代码
Oct 20 Javascript
js实现各种复制到剪贴板的方法(分享)
Oct 27 Javascript
JQuery和PHP结合实现动态进度条上传显示
Nov 23 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
解析vue data不可以使用箭头函数问题
Jul 03 Javascript
webpack实现一个行内样式px转vw的loader示例
Sep 13 Javascript
Vuex实现简单购物车
Jan 10 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
PHP技术开发技巧分享
2010/03/23 PHP
php防止sql注入的方法详解
2017/02/20 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
2013/11/18 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
Angular实现的进度条功能示例
2018/02/18 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
学生自我鉴定范文
2013/10/04 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书