disruptor 問題排查


 

需求:收到銀行異步通知,要在2秒內將結果返回銀行,同時還要根據銀行返回的交易狀態更新數據庫訂單狀態和其他業務。

采用disruptor,其實最好使用獨立MQ產品。本次用的是disruptor,遇到了一些問題,本文說下disruptor的問題排查。

 

問題1、消費者不在接收隊列消息。

原因:handler程序中throw e ,將異常拋給了disruptor,而我們沒有設定com.lmax.disruptor.ExceptionHandler。

解決:法1.handler中不要throw e,而是catch捕獲並處理。法2,設定ExceptionHandler

 

問題2、壓測時,ringBufferSize=1024,策略=BlockingWaitStrategy。1個用戶連續發,結果到1000筆左右時,就不在執行了,但沒報錯。於是改成2048,結果到2000筆左右時也不在執行了。

解決:隊列設置為1024*1024,就解決了。

原因:

 

SingleProducerSequencer.java 部分源碼:

 

有些人會說,隊列數調在高也可能會出現1024、2048時的阻塞情況,這不是解決問題的根本方法。

的確如此,可通過構建多消費者,使得消費能力盡可能的敢上生產能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM