名词解释
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队列。