java - 消息隊(duì)列處理臨界時(shí)間問(wèn)題
問(wèn)題描述
現(xiàn)在從消息隊(duì)列接收消息,然后寫入文件。每小時(shí)寫一個(gè),是批量寫入。但是出現(xiàn)個(gè)問(wèn)題,每次寫的新文件開(kāi)頭都有一些應(yīng)該屬于上個(gè)小時(shí)得數(shù)據(jù),消息體有time。如何保證所有消息都嚴(yán)格寫入自己小時(shí)得文件。現(xiàn)在想到的是將批量寫入的buffer按小時(shí)區(qū)分,Map<hour,buffer>,一個(gè)buffer對(duì)應(yīng)一個(gè)小時(shí),以buffer 對(duì)應(yīng)的小時(shí)字段生成文件名,這樣就保證每個(gè)buffer 里的數(shù)據(jù)都屬于自己的文件。還有其他更好的方法嗎?
問(wèn)題解答
回答1:文件在小時(shí)整點(diǎn)生成,每個(gè)消息都帶上各自的時(shí)間戳,匹配寫
回答2:感覺(jué)你這個(gè)問(wèn)題可能有以下幾個(gè)原因造成的:
producer重復(fù)發(fā)送了消息
mq重復(fù)發(fā)送了消息給consumer
前一小時(shí)consumer沒(méi)有告知mq已經(jīng)消費(fèi)消息,導(dǎo)致后一個(gè)小時(shí)mq又發(fā)送了消息
參考資料:
duplicated-messages-on-activemq
avoiding-duplicated-messages-on-jms-activemq
duplicate-detection
相關(guān)文章:
1. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語(yǔ)法實(shí)現(xiàn)存在即更新應(yīng)該使用哪個(gè)標(biāo)簽?2. mysql - 數(shù)據(jù)庫(kù)建字段,默認(rèn)值空和empty string有什么區(qū)別 1103. mysql - 這種分級(jí)一對(duì)多,且分級(jí)不平衡的模型該怎么設(shè)計(jì)表?4. Navicat for mysql 中以json格式儲(chǔ)存的數(shù)據(jù)存在大量反斜杠,如何去除?5. mac OSX10.12.4 (16E195)下Mysql 5.7.18找不到配置文件my.cnf6. java - 數(shù)據(jù)庫(kù)查詢多表7. 新人求教MySQL關(guān)于判斷后拼接條件進(jìn)行查詢的sql語(yǔ)句8. mysql - 千萬(wàn)數(shù)據(jù) 分頁(yè),當(dāng)偏移量 原來(lái)越大時(shí),怎么優(yōu)化速度9. MySQL FOREIGN KEY 約束報(bào)錯(cuò)10. mysql - 數(shù)據(jù)庫(kù)表中,兩個(gè)表互為外鍵參考如何解決
