内容简介:在建立连接时,设置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) } }) }
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- NATS 多种连接 Golang 实践
- Node.js 服务连接 MongoDB 处理最佳实践
- 客户端 IPV6 迁移适配:连接竞速算法 Happy Eyeballs 探索实践(一)
- 【生产实践总结】支撑百万连接的系统应该如何设计其高并发架构?【石杉的架构笔记】
- tcp 长连接与短连接
- 没有 HTTP 连接池,空谈什么持久连接
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。