disruptor 問題排查

 

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

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

 

問題一、消費者不在接收隊列消息。異步

緣由:handler程序中throw e ,將異常拋給了disruptor,而咱們沒有設定com.lmax.disruptor.ExceptionHandler。spa

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

 

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

解決:隊列設置爲1024*1024,就解決了。源碼

緣由:產品

 

SingleProducerSequencer.java 部分源碼:it

 

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

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

相關文章
相關標籤/搜索