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

栏目: Node.js · 发布时间: 5年前

内容简介:在建立连接时,设置connection_name属性,可以在RabbitMQ Managerment 中查看到连接来自那个实例。如无必要,建议将队列设置成自动删除,这个在TCP连接断开后,队列会自动删除。另外也不要使用持久化队列。

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

参考


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux命令行与shell脚本编程大全 第3版

Linux命令行与shell脚本编程大全 第3版

[美]布鲁姆,布雷斯纳汉 / 门佳、武海峰 / 人民邮电出版社 / 2016-8-1 / CNY 109.00

这是一本关于Linux命令行与shell脚本编程的全方位教程,主要包括四大部分:Linux命令行,shell脚本编程基础,高级shell脚本编程,如何创建实用的shell脚本。本书针对Linux系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的shell脚本。一起来看看 《Linux命令行与shell脚本编程大全 第3版》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具