详解Node.js amqplib 连接 Rabbit MQ最佳实践

 更新时间:2019年01月24日 14:21:17   作者:wangduanduan  
这篇文章主要介绍了详解Node.js amqplib 连接 Rabbit MQ最佳实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

客户端设置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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 初识NodeJS服务端开发入门(Express+MySQL)

    初识NodeJS服务端开发入门(Express+MySQL)

    本篇文章主要介绍了初识NodeJS服务端开发入门(Express+MySQL),可以对数据库中的一张表进行简单的CRUD操作,有兴趣的可以了解一下。
    2017-04-04
  • 使用travis-ci如何持续部署node.js应用详解

    使用travis-ci如何持续部署node.js应用详解

    最近在学习使用 travis-ci 对项目进行持续集成测试,所以下面这篇文章主要给大家介绍了关于使用travis-ci如何持续部署node.js应用的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • nodejs和C语言插入mysql数据库乱码问题的解决方法

    nodejs和C语言插入mysql数据库乱码问题的解决方法

    这篇文章主要介绍了nodejs和C语言插入mysql数据库乱码问题,需要的朋友可以参考下
    2017-04-04
  • Node.js中利用js-xlsx处理xlsx文件的实现

    Node.js中利用js-xlsx处理xlsx文件的实现

    js-xlsx库是目前Github上star数量最多的处理Excel的库,本文介绍用 Node.js中的js-xls库来处理Excel文件,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Node.JS中的模块、exports和module讲解

    Node.JS中的模块、exports和module讲解

    这篇文章主要介绍了Node.JS中的模块、exports和module讲解,模块分为两类一类是核心模块一类是文件模块,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • npm的安装与使用

    npm的安装与使用

    这篇文章介绍了npm的安装与使用,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • node中http模块的使用及执行流程

    node中http模块的使用及执行流程

    http这个模块的职责就是帮你创建编写服务器,接下来通过本文给大家介绍node中http模块的使用及执行流程,感兴趣的朋友一起看看吧
    2021-09-09
  • 浅谈Nodejs应用主文件index.js

    浅谈Nodejs应用主文件index.js

    这篇文章主要介绍了浅谈Nodejs应用主文件index.js的相关资料,需要的朋友可以参考下
    2016-08-08
  • node.js中的fs.statSync方法使用说明

    node.js中的fs.statSync方法使用说明

    这篇文章主要介绍了node.js中的fs.statSync方法使用说明,本文介绍了fs.statSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 基于docker搭建node环境开发服务器全过程

    基于docker搭建node环境开发服务器全过程

    这篇文章主要给大家介绍了关于如何基于docker搭建node环境开发服务器的相关资料,本文将采用docker技术部署一个简单的nodejs应用,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11

最新评论