【发布时间】:2015-04-01 19:13:43
【问题描述】:
我有一个从 source_queue 到 dest_queue@dblink 的队列传播形式,有效负载是 anydata。订阅者被添加到 source_queue:
sys.aq$_agent('CONSUMER', dest_queue@dblink, null);
现在我想知道是否有办法在 source_queue 使用 dbms_aq.dequeue,如果入队的消息无法传播,因为到 dest_queue@dblink 的网络会中断一段时间。我尝试了以下方法:
m_queueOpts.consumer_name := 'CONSUMER';
m_queueOpts.dequeue_mode := dbms_aq.remove;
DBMS_aq.dequeue (
queue_name => 'source_queue',
dequeue_options => m_queueOpts,
message_properties => m_msgProps,
payload => m_data,
msgid => m_msgId
);
但我收到错误:ORA-25247: CONSUMER 不是指定消息的收件人
这是正确的,因为收件人在 dest_queue@dblink。
但如果消息无法传播,我想将消息从 source_queue 中出列或删除。是否有其他方法可以从 source_queue 中出列?
我试过了,在 queueOptions 也设置了一个 message_id,但我仍然无法将消息出队。
【问题讨论】: