定時任務實現自動補償佇列踩坑實錄

2021-10-10 03:43:29 字數 555 閱讀 2928

分析**後發現,

那…如果補償佇列有源源不斷的大批量訊息,那麼會存在三個問題。

1、while迴圈一直不結束。

2、若消費補償佇列時失敗,則會存放在errorlist,若有大批量的訊息失敗,會導致有這個list會無限增大,最嚴重時甚至oom

3、確認時採取了一次確認,若存在上百萬上千萬的補償訊息同時確認會導致占用時間增長,mq處理不過來,甚至阻塞,網路頻寬被打滿的情況

當rabbitmq集群由5個節點組成的時候,如果2個或2個或以上節點在一定時間內有網路或連線阻塞問題,會導致集群出現不可恢復的腦裂問題。

事後進行了復現,在出現大量訊息快速消費且批量ack時會出現sync節點資訊同步情況,如果同步時間過長會導致同步失敗以致於節點失聯。

mq集群在滿足以下特定條件後,出現卡死現象,不能正常生產和消費訊息:

1.mq集群最大使用記憶體閾值設定超過60%

2.mq集群中記憶體中有大量訊息,占用較多記憶體,接近設定閾值

3.mq集群處在頻繁生產和消費訊息的場景下,大塊記憶體被快速交換使用

4.mq集群版本為3.5,較低,且執行在centos6系統

spring boot 定時任務實現

scheduled 使用 scheduled 非常容易,直接建立乙個 spring boot 專案,並且新增 web 依賴 spring boot starter web,專案建立成功後,新增 enablescheduling 註解,開啟定時任務 enablescheduling 開啟定時任務 pu...

Spring定時任務實現

一 spring 定時任務 component enablescheduling 可以在啟動類上註解也可以在當前檔案 public class testschedule scheduled fixedrate 1000 10 public void runsecend scheduled fixed...

SpringBoot定時任務實現

靜態定時任務實現 基於註解來建立定時任務 configuration enablescheduling public class scheduletask 基於資料庫的動態定時任務實現 將定時任務配置在資料庫,啟動專案的時候,用mybatis讀取資料庫,例項化物件,並設定定時任務。如果需要新增,減少...