详解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_03(ExtJs Grid的简单使用)
Oct 02 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
模拟多级复选框效果的jquery代码
Aug 13 Javascript
VUEJS实战之利用laypage插件实现分页(3)
Jun 13 Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
Vue的Class与Style绑定的方法
Sep 01 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 Javascript
JavaScript 中使用 Generator的方法
Dec 29 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
vue h5移动端禁止缩放代码
Oct 28 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绿色集成环境详解
2017/01/25 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
flask框架视图函数用法示例
2018/07/19 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
请说出几个常用的异常类
2013/01/08 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
人事专员职责
2014/02/22 职场文书
专业技术职务聘任书
2014/03/29 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
不同意离婚上诉状
2015/05/23 职场文书
2015元旦感言
2015/12/09 职场文书
导游词之桂林山水
2019/09/20 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
如何理解及使用Python闭包
2021/06/01 Python