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 : 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;
/
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
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;
/