пятница, 18 сентября 2009 г.

Oracle AQ

Архитектор выступил с инновационной идеей: для того, чтобы передать из базы сообщение, совсем не обязательно пользовать СОАП-запросы. Можно использовать и асинхронные механизмы Oracle Advanced Queueing.
Сижу, изучаю Advanced Queueing по примерам.

Самый примитивный пример:

CREATE OR REPLACE TYPE event_itr_type AS OBJECT (
xpId Number,
tncpi3Id Number,
startTime Date,
endTime Date,
type VARCHAR2(32)
);
/

BEGIN
DBMS_AQADM.create_queue_table (
queue_table => 'vht_tmp.event_queue_tab', queue_payload_type => 'vht_tmp.event_itr_type');

DBMS_AQADM.create_queue (
queue_name => 'vht_tmp.event_queue',
queue_table => 'vht_tmp.event_queue_tab');

DBMS_AQADM.start_queue (
queue_name => 'vht_tmp.event_queue',
enqueue => TRUE);
END;
/



DECLARE
l_enqueue_options DBMS_AQ.enqueue_options_t;
l_message_properties DBMS_AQ.message_properties_t;
l_message_handle RAW(16);
l_event_msg event_itr_type;
BEGIN
l_event_msg := event_itr_type(123, 456789, SYSDATE, SYSDATE+1/24, 'PLAAN');

DBMS_AQ.enqueue(queue_name => 'vht_tmp.event_queue',
enqueue_options => l_enqueue_options,
message_properties => l_message_properties,
payload => l_event_msg,
msgid => l_message_handle);

COMMIT;
END;
/

2 комментария:

  1. Да всё получилось. Система, использующая эти механизмы, уже несколько лет успешно стоит на Продакшн. Не жалуемся.

    ОтветитьУдалить