错误数据涉及AQ队列维护的思考

名词解释

    AQ:Oracle DB的高级队列。用于解决多台服务读任务队列。
系统架构
                  enqueue     dequeue
   Table trigger   --->  AQ  <--------  Java Thread(多线程) 
数据错误:
  因为Trigger的业务逻辑或者源头的数据问题,导致大量的AQ生成,造成正常的数据消息排在队列后面。
   
后续使用AQ时注意:
  a.处理错误数据的过程:
       1.停 Trigger ,通过开关表或者 disable trigger.
       2.限制Java Thread访问,因为Java Thread是类似long polling的方式,一直block等待消息,在 timeout后才断开。 通过停应用,或调整Thread的sleep时间,或者配置文件的开关。
       3.truncate ta table。或者通过单独的procedure来消费无用的queue。
       4.恢复trigger,恢复应用。
       5.验证正确性。
  b.设计:
     1.Queue带优先级标志,这样可以通过逻辑消费掉无用的Queue。
     2.Java Thread的控制开关,可以通过定时读取配置文件来刷新开关标志。便于维护或处理问题时,断开于数据库的长连接。
     3.Trigger设置开关,便于堵住源头的数据进入AQ队列。

你可能感兴趣的:(java,thread,多线程,oracle,数据库,table)