是否可以将消息状态设置为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;