?????????首先介紹一下項目情況,項目需要設(shè)備在線實時采集,最高采集頻率為1次/秒,設(shè)備上傳數(shù)據(jù)時,協(xié)議規(guī)定的是10條/包,服務(wù)端通過rabbitMq接收消息,并進(jìn)行存儲、預(yù)警、推送等進(jìn)行多層處理,因為web端要求數(shù)據(jù)實時展示,且延時不得超過1分鐘,因數(shù)據(jù)量較大,消息處理不滿足要求,故需要進(jìn)行優(yōu)化,主要分為一下三個方面:
????????1、首先,拆分各處理邏輯,用不同的服務(wù)進(jìn)行分別處理
????????2、通過rabbitMq把消息發(fā)布到下一層,發(fā)布時進(jìn)行合并,減少消息發(fā)布量
????????3、通過異步多線程的方式去處理任務(wù)
一、業(yè)務(wù)邏輯拆分
? ? ? ? 業(yè)務(wù)邏輯拆分通過WorkerService來實現(xiàn),把存儲、預(yù)警、推送分別分為不同的WorkerService來進(jìn)行業(yè)務(wù)邏輯處理。
二、消息合并
????????消息合并又分為兩部分,一是發(fā)布時把多個數(shù)據(jù)包消息合并之后統(tǒng)一進(jìn)行發(fā)布,二是發(fā)布消息使用批量發(fā)布的方式。
? ? ? ? 數(shù)據(jù)合并,首先創(chuàng)建一個線程安全的全局變量集合A,消息訂閱后,放到統(tǒng)一放到集合A中,當(dāng)集合A中的數(shù)據(jù)達(dá)到設(shè)定的閾值(比如500條)時統(tǒng)一進(jìn)行。
? ? ? ? 批量消息發(fā)布,代碼見上篇:.Net 6 下WorkerService+RabbitMq實現(xiàn)消息的異步發(fā)布訂閱-CSDN博客
這里不進(jìn)行代碼的展示,僅分享優(yōu)化思路,當(dāng)然過程中還有很多其他的實現(xiàn)小細(xì)節(jié),由于當(dāng)時沒記錄,現(xiàn)在有點忘記了,等想起來再進(jìn)行補(bǔ)充。文章來源:http://www.zghlxwxcb.cn/news/detail-800512.html
? ? ? ? 經(jīng)優(yōu)化后,項目滿足了2000臺設(shè)備數(shù)據(jù)的實時上報,但未進(jìn)行上限測試,優(yōu)化效果還是非常明顯的。文章來源地址http://www.zghlxwxcb.cn/news/detail-800512.html
到了這里,關(guān)于.Net6 記一次RabbitMq消息訂閱/發(fā)布優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!