1

是否可以将消息状态设置为DBMS_AQ.EXPIRED不到达retry_count

来自 oracle 文档dbms_aq.message_properties_t.state

指定出队时消息的状态。该参数不能在入队时设置。可能的状态如下:

  • DBMS_AQ.READY:消息已准备好进行处理。
  • DBMS_AQ.WAITING:尚未达到消息延迟。
  • DBMS_AQ.PROCESSED:消息已被处理并被保留。
  • DBMS_AQ.EXPIRED:消息已移至异常队列。

但是,当我尝试将消息出队时,出队state := DBMS_AQ.EXPIRED后的状态仍然是DBMS_AQ.PROCESSED.

declare
    procedure mark_as_expired(p_queue_name in varchar2, p_msgid in raw) is
        l_dequeue_options DBMS_AQ.DEQUEUE_OPTIONS_T;
        l_message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;

        l_dummy_payload obj_dummy;
        l_dummy_msgid raw(16);
    begin
        l_dequeue_options.msgid := p_msgid;
        l_dequeue_options.wait := DBMS_AQ.NO_WAIT;
        l_dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;

        l_message_properties.state := DBMS_AQ.EXPIRED;

        dbms_aq.dequeue(
            queue_name => sys_context('USERENV', 'CURRENT_USER')||'.'||p_queue_name,
            dequeue_options => l_dequeue_options,
            message_properties => l_message_properties,
            payload => l_dummy_payload,
            msgid => l_dummy_msgid);
    end;
begin
    mark_as_expired('QUEUE_NAME', 'BE3228C90B3239BBE0534980CB0AE63E');
end;
4

0 回答 0