Oracle高级队列-订阅服务器消息跟踪



Oracle Advanced Queuing如何跟踪订阅者为多用户队列退出队列的消息?

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

查询AQ$<your_queue_table>.MSG_STATE。对于每个消息,CCD_ 2具有用于每个订户的条目。

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-消息已成功处理(退出队列),但将保留在队列中,直到达到执行dbms_aqadm.create_queue时为队列指定的retention_time为止
  • 等等

假设我们有2条消息(msg1,msg2)和2个订阅者(sub1,sub2)。sub1已经将消息1退出队列。结果我们将看到:

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,您可能无法看到已处理的邮件。