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

的确如此,可经过构建多消费者,使得消费能力尽量的敢上生产能力。

相关文章
相关标签/搜索