详解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 相关文章推荐
extjs tabpanel限制选项卡数量实现思路及代码
Apr 02 Javascript
javascript生成随机数的方法
May 16 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 Javascript
使用vue-resource进行数据交互的实例
Sep 02 Javascript
实例详解Node.js 函数
Jun 10 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
vue中使用element组件时事件想要传递其他参数的问题
Sep 18 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 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 FPDF类库应用实现代码
2009/03/20 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
js实现消息滚动效果
2017/01/18 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
Python 使用多属性来进行排序
2019/09/01 Python
Python的pygame安装教程详解
2020/02/10 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
大学生自我鉴定范文
2013/12/28 职场文书
指导教师推荐意见
2015/06/05 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL