詳解Node.js amqplib 連接 Rabbit MQ最佳實踐
客戶端設(shè)置connection_name
在建立連接時,設(shè)置connection_name屬性,可以在RabbitMQ Managerment 中查看到連接來自那個實例。
amqp.connect(rabbitMqAddress, { clientProperties: { connection_name: 'your host name' } })
隊列屬性autoDelete durable
如無必要,建議將隊列設(shè)置成自動刪除,這個在TCP連接斷開后,隊列會自動刪除。另外也不要使用持久化隊列。
channel.assertQueue(queueName, { autoDelete: true, durable: false })
connnection 和 channel管理
connnection的內(nèi)存消耗。一個connection至少要使用100kb的內(nèi)存空間,過多的connetion占用將會導(dǎo)致內(nèi)存溢出,服務(wù)崩潰等問題。(我曾遇到過生產(chǎn)系統(tǒng),RabbitMQ連接過多,系統(tǒng)一直處于崩潰邊緣的險境)
重用connection或者channel,而不要重復(fù)開關(guān),下面給出AMQP各個階段所耗費的tcp包,重復(fù)的開關(guān),將會導(dǎo)致
- 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連接,你就要警惕了。
監(jiān)控進程與RabbitMQ TCP連接數(shù),將NodeJS的運行信息寫入influxDB,并在grafana做監(jiān)控和告警。其中tcp連接數(shù)可以使用shelljs執(zhí)行命令獲取。
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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- node.js學(xué)習(xí)筆記之koa框架和簡單爬蟲練習(xí)
- 手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法
- 利用node.js寫一個爬取知乎妹紙圖的小爬蟲
- 從零搭建docker+jenkins+node.js自動化部署環(huán)境的方法
- Docker使用編寫dockerfile啟動node.js應(yīng)用
- Node.js Buffer模塊功能及常用方法實例分析
- Node.js net模塊功能及事件監(jiān)聽用法分析
- Docker部署Node.js的方法步驟
- 一步步教你利用Docker設(shè)置Node.js
- 基于node.js實現(xiàn)爬蟲的講解
相關(guān)文章
electron demo項目npm install安裝失敗的解決方法
下面小編就為大家分享一篇electron demo項目npm install安裝失敗的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02在Node.js中實現(xiàn)文件復(fù)制的方法和實例
這篇文章主要介紹了在Node.js中實現(xiàn)文件復(fù)制的方法和實例,使用FS模塊實現(xiàn),需要的朋友可以參考下2014-06-06