详解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 写类方式之一
Jul 05 Javascript
Google (Local) Search API的简单使用介绍
Nov 28 Javascript
JavaScript字符串常用类使用方法汇总
Apr 14 Javascript
javascript css红色经典选项卡效果实现代码
May 17 Javascript
AngularJS基础 ng-csp 指令详解
Aug 01 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
解决JQuery全选/反选第二次失效的问题
Oct 11 jQuery
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
JavaScript图片旋转效果实现方法详解
Jun 28 Javascript
jquery插件实现图片悬浮
Apr 16 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
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
PHP中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
修改发贴的编辑功能
2007/03/07 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
python爬虫爬取网页表格数据
2018/03/07 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
python实现简单俄罗斯方块
2020/03/13 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
省三好学生申请材料
2014/01/22 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
科学育儿宣传标语
2014/10/08 职场文书
追悼会答谢词
2015/01/05 职场文书
感恩节寄语2015
2015/03/24 职场文书
2015年统战工作总结
2015/05/19 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
实例详解Python的进程,线程和协程
2022/03/13 Python