具體的RabbitMQ概念、安裝、使用方法、SpringAMQP配置,假設(shè)讀者已有了基礎(chǔ)。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到振安網(wǎng)站設(shè)計(jì)與振安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋振安地區(qū)。在邊讀邊寫(xiě)的情況下:速率只與網(wǎng)絡(luò)帶寬正相關(guān),網(wǎng)絡(luò)使用率高能達(dá)到接近100%,并且數(shù)據(jù)使用率很高(90%以上)。
在千兆網(wǎng)下,以500KB一條數(shù)據(jù)為例,讀寫(xiě)速率均能達(dá)到200條/s,約為100MB/s。
在只寫(xiě)不讀的情況下:寫(xiě)入速率瓶頸在于硬盤(pán)寫(xiě)入速度。
Windows環(huán)境下,在安裝前設(shè)置環(huán)境變量:RABBITMQ_BASE=D:RabbitMQ_Data
表現(xiàn):磁盤(pán)寫(xiě)滿后發(fā)送、讀取程序均不能連接服務(wù)。
解決方法:將Queue、Exchange設(shè)置為Durable即不會(huì)發(fā)生數(shù)據(jù)丟失問(wèn)題。
通過(guò)a.關(guān)閉服務(wù);b.刪除占位文件、erl_crash.dump;c.重啟服務(wù) 三步操作后,磁盤(pán)會(huì)清理出10M左右空間,此時(shí)讀取數(shù)據(jù)程序便可正常工作。
正確設(shè)計(jì)的架構(gòu),應(yīng)確保RabbitMQ不會(huì)發(fā)生磁盤(pán)寫(xiě)滿崩潰的情況。
在網(wǎng)絡(luò)帶寬占滿的情況下,通過(guò)集群的方式解決吞吐量不足的問(wèn)題需要多臺(tái)效果才明顯。
假設(shè)外設(shè)吞吐率為d條/s,外設(shè)向RabbitMQ1發(fā)送的概率為r1,向RabbitMQ2發(fā)送的概率為r2,RabbitMQ1需要向RabbitMQ2轉(zhuǎn)發(fā)的概率為r3,RabbitMQ2需要向RabbitMQ1轉(zhuǎn)發(fā)的概率為r3。那么RabbitMQ1進(jìn)入的吞吐率為:(r1*d + r4*r2*d) 條/s ≈ 3d/4條/s,RabbitMQ2進(jìn)入的吞吐率為:(r2*d + r3*r1*d) 條/s ≈ 3d/4條/s;這樣的確比只使用一臺(tái)RabbitMQ的吞吐率d條/s要求低些。
N臺(tái)RabbitMQ的集群,每臺(tái)的平均吞吐率為:(2N-1)d/(N*N) 條/s;N=3時(shí),平均吞吐率為5d/9條/s;N=4時(shí),平均吞吐率為7d/16條/s。
解決方法:多臺(tái)RabbitMQ服務(wù)器提供服務(wù),在客戶端以輪循方式訪問(wèn)服務(wù),若1臺(tái)down掉則不使用此臺(tái)的隊(duì)列服務(wù),服務(wù)器之間沒(méi)有聯(lián)系,這樣N臺(tái)RabbitMQ的平均吞吐率為:1d/N 條/s。具體實(shí)現(xiàn)可以,專寫(xiě)一個(gè)用戶收發(fā)RabbitMQ消息的jar/dll,在配置文件里填寫(xiě)RabbitMQ機(jī)器地址,使用輪循詢問(wèn)、收發(fā)的方式,提供給應(yīng)用程序以黑盒方式調(diào)用。下面提供了java版本的收發(fā)實(shí)現(xiàn)。
發(fā)送端sender.xml配置:
|
說(shuō)明:這里配置了兩個(gè)RabbitMQ服務(wù)器,timeFlicker的目的是過(guò)一段時(shí)間把不能服務(wù)的RabbitMQ服務(wù)器重新添加到列表中,重試發(fā)送。
接收端receiver.xml配置:
|
說(shuō)明:這里監(jiān)聽(tīng)了兩個(gè)RabbitMQ服務(wù)器,此處不需要timeFlicker。
如需具體代碼可以聯(lián)系本人 http://www.cnblogs.com/wgp13x/。
我認(rèn)為MQ丟數(shù)據(jù)的問(wèn)題,主要是同步還是異步刷盤(pán)、斷電是否導(dǎo)致的。只要send反饋正確,確保發(fā)送被接收,receive時(shí)有反饋后才會(huì)刪除數(shù)據(jù);同步刷盤(pán),或異步刷盤(pán)不斷電的,就不會(huì)丟失消息,
程序?qū)τ诎l(fā)送反饋異常的,要記錄;MQ對(duì)于receive無(wú)反饋的,有重發(fā)機(jī)制,可能會(huì)有一條數(shù)據(jù)發(fā)送多次的情況,要在程序中剔除。
王安琪,英文名Angel,南京郵電大學(xué)計(jì)算機(jī)應(yīng)用技術(shù)碩士學(xué)位。 熟悉Java、C#編程語(yǔ)言。專注于WebService、海量數(shù)據(jù)處理、搜索引擎技術(shù)、消息中間件技術(shù)、分布式文件存儲(chǔ)、.NET應(yīng)用程序開(kāi)發(fā)、系統(tǒng)架構(gòu)設(shè)計(jì)。主要從事大數(shù)據(jù)管理系統(tǒng)的研發(fā),項(xiàng)目經(jīng)理,系統(tǒng)架構(gòu)師,就職于江蘇金陵科技集團(tuán)有限公司。
Email:aitanjupt@hotmail.com
QQ:289770363