2

Oracle Advanced Queuing 如何跟踪订阅者为多消费者队列出列的哪些消息?

USER_QUEUE_SUBSCRIBERS 表跟踪每个队列的订阅者。尽管跟踪给定队列的订阅者状态(例如订阅者出列的最后一条消息是什么?),但我找不到表/视图。

4

1 回答 1

3

查询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';

例如,我的队列表是MC_QUEUE_TABLE,我的队列是MC_QUEUE

MSG_STATE 需要:

  • READY - 消息已准备好被处理,即延迟
  • RETAINEDPROCESSED - 消息已成功处理(出列),但将保留在队列中,直到达到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,您可能无法看到已处理的消息。

于 2016-07-22T02:40:09.537 回答