Daemon écoutant une queue Oracle
Bien le bonjour,
J'aimerais implémenter un daemon écoutant une queue Oracle, affichant chaque nouveau message reçu sur cette queue et enlevant le message de la queue après affichage.
Particularité : ma queue fait partie d'une queue table avec multiple consumers.
Je pensais faire tout cela à l'aide de l'API oracle.AQ mais il y a vraiment très peu de doc et encore moins d'exemples... Est-ce qu'il y a moyen de faire plus simple ou plus direct ?
Merci d'avance !
Le code SQL pour la création de la queue table TQ_AQ_INBOUND_FLOW :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| BEGIN
SYS.DBMS_AQADM.DROP_QUEUE_TABLE
(QUEUE_TABLE => 'MILDJU.TQ_AQ_INBOUND_FLOW');
END;
/
BEGIN
SYS.DBMS_AQADM.CREATE_QUEUE_TABLE
(
QUEUE_TABLE => 'MILDJU.TQ_AQ_INBOUND_FLOW'
,QUEUE_PAYLOAD_TYPE => 'SYS.AQ$_JMS_TEXT_MESSAGE'
,COMPATIBLE => '10.0.0'
,STORAGE_CLAUSE => '
TABLESPACE TSPACE_001
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)'
,SORT_LIST => 'ENQ_TIME'
,MULTIPLE_CONSUMERS => TRUE
,MESSAGE_GROUPING => 0
,SECURE => FALSE
);
END;
/ |
Et celui de la queue à écouter :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| BEGIN
SYS.DBMS_AQADM.STOP_QUEUE ( QUEUE_NAME => 'MILDJU.AQ_INBOUND_FLOW');
SYS.DBMS_AQADM.DROP_QUEUE ( QUEUE_NAME => 'MILDJU.AQ_INBOUND_FLOW');
END;
/
BEGIN
SYS.DBMS_AQADM.CREATE_QUEUE
(
QUEUE_NAME => 'MILDJU.AQ_INBOUND_FLOW'
,QUEUE_TABLE => 'MILDJU.TQ_AQ_INBOUND_FLOW'
,QUEUE_TYPE => SYS.DBMS_AQADM.NORMAL_QUEUE
,MAX_RETRIES => 5
,RETRY_DELAY => 0
,RETENTION_TIME => 0
);
END;
/
BEGIN
SYS.DBMS_AQADM.START_QUEUE
(
QUEUE_NAME => 'MILDJU.AQ_INBOUND_FLOW'
,ENQUEUE => TRUE
,DEQUEUE => TRUE
);
END;
/ |