客户端设置connection_name建立连接时,设置connection_name属性,在RabbitMQ管理器中可以查看连接来自哪个实例。amqp.connect(rabbitMqAddress,{clientProperties:{connection_name:'你的主机名'}})队列属性autoDeletedurable如果不需要,建议设置队列自动删除。TCP连接断开后,队列会自动删除。也不要使用持久队列。channel.assertQueue(queueName,{autoDelete:true,durable:false})连接和通道管理连接的内存消耗。一个连接至少要使用100kb的内存空间,过多的连接会导致内存溢出、服务崩溃等问题。(我曾遇到过RabbitMQ连接过多的生产系统,系统一直处于崩溃的边缘。)重用连接或通道,而不是重复切换。下面给出了AMQP每个阶段消耗的tcp数据包。重复切换会会导致AMQPconnections:7TCPpackagesAMQPchannel:2TCPpackagesAMQPpublish:1TCPpackage(moreforlargermessages)AMQPclosechannel:2TCPpackagesAMQPcloseconnection:2TCPpackagesTotal14-19packages(+Acks)一个进程,一个通道,一个连接,如果一个pod与RabbitMQ建立了多个tcp连接,就应该提高警惕了。监控进程与RabbitMQ的TCP连接数,将NodeJS的运行信息写入influxDB,在grafana中做监控报警。其中,tcp连接数可以通过执行shelljs命令获取。函数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/blo...https://www.cloudamqp.com/blo...https://www.cloudamqp.com/blo...
