Oracle 高级队列 — 订阅者消息跟踪
Oracle Advanced Queuing - Subscriber Message Tracking
Oracle Advanced Queuing 如何跟踪订阅者为多消费者队列出列的消息?
USER_QUEUE_SUBSCRIBERS table 跟踪每个队列的订阅者。我找不到 table/view 虽然它跟踪给定队列的订阅者状态(例如,订阅者出队的最后一条消息是什么?)。
查询AQ$<your_queue_table>.MSG_STATE
。 AQ$<your_queue_table>.MSG_STATE
为每条消息的每个订户都有一个条目。
select queue, consumer_name, deq_txn_id, deq_time, deq_user_id,
user_data, msg_state
from aq$MC_QUEUE_TABLE
where queue = 'MC_QUEUE';
例如,我的队列 table 是 MC_QUEUE_TABLE
,我的队列是 MC_QUEUE
。
MSG_STATE需要:
- READY - 消息已准备好处理,即 delay
- RETAINED 或 PROCESSED - 消息已成功处理(出列)但将保留在队列中直到
retention_time
已达到执行时为队列指定的 dbms_aqadm.create_queue
。
- 等等
假设我们有 2 条消息(msg1、msg2)和 2 个订阅者(sub1、sub2)。并且 sub1 已经将 msg1 出列。
结果我们将看到:
QUEUE USER_DATA MSG_STATE CONSUMER_NAME
MC_QUEUE (msg1) READY SUB2
MC_QUEUE (msg2) READY SUB2
MC_QUEUE (msg1) PROCESSED SUB1
MC_QUEUE (msg2) READY SUB1
由于 retention_time
,您可能看不到已处理的消息。
Oracle Advanced Queuing 如何跟踪订阅者为多消费者队列出列的消息?
USER_QUEUE_SUBSCRIBERS table 跟踪每个队列的订阅者。我找不到 table/view 虽然它跟踪给定队列的订阅者状态(例如,订阅者出队的最后一条消息是什么?)。
查询AQ$<your_queue_table>.MSG_STATE
。 AQ$<your_queue_table>.MSG_STATE
为每条消息的每个订户都有一个条目。
select queue, consumer_name, deq_txn_id, deq_time, deq_user_id,
user_data, msg_state
from aq$MC_QUEUE_TABLE
where queue = 'MC_QUEUE';
例如,我的队列 table 是 MC_QUEUE_TABLE
,我的队列是 MC_QUEUE
。
MSG_STATE需要:
- READY - 消息已准备好处理,即 delay
- RETAINED 或 PROCESSED - 消息已成功处理(出列)但将保留在队列中直到
retention_time
已达到执行时为队列指定的dbms_aqadm.create_queue
。 - 等等
假设我们有 2 条消息(msg1、msg2)和 2 个订阅者(sub1、sub2)。并且 sub1 已经将 msg1 出列。 结果我们将看到:
QUEUE USER_DATA MSG_STATE CONSUMER_NAME
MC_QUEUE (msg1) READY SUB2
MC_QUEUE (msg2) READY SUB2
MC_QUEUE (msg1) PROCESSED SUB1
MC_QUEUE (msg2) READY SUB1
由于 retention_time
,您可能看不到已处理的消息。