这个问题是指Oracle Streams Advanced Queuing中的消息出列。
我需要确保按顺序处理彼此相关的消息。
例如,假设队列中包含四个消息,这些消息具有称为事务引用 (txn_ref) 的业务相关字段,并且其中两个消息 (1,3) 属于同一事务 (000001):
id | txn_ref |
---+---------+
1 | 000001 |
2 | 000002 |
3 | 000001 |
4 | 000003 |
还假设我正在运行 4 个希望从该队列中出列的线程/进程。应发生以下情况:
- 线程 1 出列消息 #1
- 线程 2 出列消息 #2
- 线程 3 将消息 #4 出列(因为消息 #3 与 #1 相关,而 #1 尚未完成)。
- 线程 4 块等待消息
- 线程 1 提交消息 #1 的工作
- 线程 4(或者线程 1)使消息 #3 出列。
我最初的想法是,我可以通过出列条件来实现这一点,其中 ENQ_TIME(入队时间)不晚于具有相同 TXN_REF 的所有消息的任何其他 ENQ_TIME。但我的问题是如何引用我尚未选择的消息的 TXN_REF 以便选择它。例如
// Java API
String condition = "ENQ_TIME = (select min(ENQ_TIME) from AQ_TABLE1 where ??";
dequeueOption.setCondition(condition);
有可能在这里实现我想要的吗?