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 :
Et celui de la queue à écouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; /
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; /
Partager