powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / очередь исключений и подписчик (AQ)
1 сообщений из 1, страница 1 из 1
очередь исключений и подписчик (AQ)
    #39983736
luchik_5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, уважаемые гуру.

Есть очередь сообщений. Сообщения в нее поступают с заданным свойством expiration (10 сек). Для этой очереди создана очередь исключений, куда и попадают сообщения по истечению времени, заданного expiration. Сообщения, попадающие в очередь исключений, мне нужно обрабатывать. Хотела создать функцию callback, но для этого надо зарегистрировать подписчика. Однако при регистрации выдается ошибка ORA-24050 subscribers are not supported for exception queue
Т.е. получается что создать подписчика на очередь исключений нельзя. Как тогда решить задачу с обработкой?

P.S. вешать джоб с процедурой в которой читаем очередь исключений не хотелось бы. Может есть какие-то еще варианты?

Создание тестовой очереди:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE or replace TYPE message_typ AS object(
       sender_id              NUMBER,
       subject                VARCHAR2(30),
       text                   VARCHAR2(1000));
    /


    BEGIN
       DBMS_AQADM.CREATE_QUEUE_TABLE(
          queue_table            => 'obj_qtab',
          queue_payload_type     => 'message_typ',
          multiple_consumers     => true
          );
    END;
    /


Создание очереди исключений и запуск очередей:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
begin
  DBMS_AQADM.create_queue (queue_name => 'obj_qtab_ex', queue_table => 'obj_qtab',
      queue_type => DBMS_AQADM.exception_queue, COMMENT => 'My Exception AQ');
  DBMS_AQADM.START_QUEUE (queue_name=> 'obj_qtab_ex',enqueue => FALSE, dequeue => TRUE);    
end;


    BEGIN
       DBMS_AQADM.CREATE_QUEUE(
          queue_name         =>  'obj_queue',
          queue_table        =>  'obj_qtab');
    END;
    /

    BEGIN
       DBMS_AQADM.START_QUEUE (
          queue_name         => 'obj_queue');
    END;
    /



создание процедуры обработки (всю полезную нагрузку вырезала)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace procedure queue_test
  (
    context  raw
   ,reginfo  sys.aq$_reg_info
   ,descr    sys.aq$_descriptor
   ,payload  raw
   ,payloadl number
  ) as
    dequeue_options    dbms_aq.dequeue_options_t;
    message_properties dbms_aq.message_properties_t;
    message_handle     raw(16);
    message            message_typ;
  begin
    null; 
    --
  end;
end queue_test;
/



Создание подписчика и регистрация ф-ии как callback
Код: plsql
1.
2.
3.
4.
5.
6.
7.
begin
  --создаем подписчика
  dbms_aqadm.add_subscriber('obj_qtab_ex', sys.aq$_agent('subscriber_queue_test', null, null));
  --регистрируем подписчика
  dbms_aq.register(sys.aq$_reg_info_list(sys.aq$_reg_info('obj_qtab_ex:subscriber_queue_test', dbms_aq.namespace_aq, 'plsql://queue_test', hextoraw('FF'))), 1);
  commit;
end;
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / очередь исключений и подписчик (AQ)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]