Exemple Consommer plusieurs files d'attente avec un automate

De Wiki1000
(Différences entre les versions)

Version du 29 août 2013 à 15:44

Sommaire

Dans cet exemple nous allons montrer comment consommer plusieurs files d'attente avec une seule tâche d'automate.

Configuration des files d'attente

Nous allons utiliser trois files d'attente :

  • Une file d'attente DBQUEUE1 sur topic1 utilisée par le producteur
  • Une file d'attente DBQUEUE2 sur topic2 utilisée par le producteur
  • Une file d'attente DBQUEUELIKE sur topic% utilisée par le consommateur

image2.png

image3.png

image1.png

L'utilisation du caractère joker % permet de consommer tous les messages de sujet correspondant.

Configuration de l'automate

Evènements :

image5.png

L'évènement file d'attente utilise la file DBQUEUELIKE pour consommer à la fois les messages produits sur DBQUEUE1 et DBQUEUE2

Automate :

image4.png

Code snippet du processus de traitement

//Procedure Execute;
var aMsg:TdbmQueueMessage; aTopic:string; idx:Integer;
begin
  if Assigned(UserContext.TaskContext) then
   begin
     UserContext.TaskContext.AddMessage('MyProcessus.Execute');
     if Assigned(UserContext.TaskContext.EventContext.receivedMsg) then
       begin
         aMsg := UserContext.TaskContext.EventContext.receivedMsg;
         UserContext.TaskContext.AddMessage('Has a message');
         for idx:=0 to aMsg.Count-1 do
          begin
            UserContext.TaskContext.AddMessage(aMsg.DisplayStrings[idx]);
          end;
 
         // simulate job
         // Branch on topic value
         aTopic := aMsg.PropAsVariant['Topic'];
         case aTopic of
          'topic1':
             begin
               UserContext.TaskContext.AddMessage('Execute code for topic1');
               sleep(5000);
             end;
          'topic2':
             begin
               UserContext.TaskContext.AddMessage('Execute code for topic2');
               sleep(5000);
             end;
          else
             begin
               UserContext.TaskContext.AddMessage('Execute code for :'+aTopic);
               sleep(1000);
             end;
         end;
       end
       else UserContext.TaskContext.AddMessage('No message');
   end
   else showMessage('not in a task');
end;

Le code test le sujet du message pour exécuter des traitements différent suivant les cas.

Exécution

Traitement sur un message de DBQUEUE1 :

Tâche : Tâche de traitement testprocessusautomate
Société : Test SYFRE Workflow
Utilisateur: syfre
Base(s) : TestWorkFlowdup_7
Mode Soc. : Enchaîner sur ces sociétés
Société(s) : 
Début : 11/04/2013 17:17:34
Fin : 11/04/2013 17:17:39
Durée : 4 s
Fichiers : 0
Statut : 0 OK

MyProcessus.Execute
Has a message
MessageClassName="TStaticRegClass"
MessageDatetime="11/04/2013"
MessageUser="syfre"
MessageOID="000000000000000000E30001A112001C"
MessageID="198"
Topic="topic1"
State="1"
OriginalUniqueID=""
idOTP="227"
ObjectClassLabel="Classe message stocké d'une file d'attente"
ObjectClassName="TDBMSTOREDQUEUEMESSAGE"
oid="000000000000000000E30001A112001C"
oiddbmQueue=""
oidShare=""
QueueName="topic1"
queueTopic="topic1"
ShareInfo=""
ShareInstanceInfo=""
ShareInstanceLevel="2"
ShareInstanceRequestedLevel="-1"
ShareLevel="0"
UniqueID="198"
UpdDate="11/04/2013"
UpdStamp="00017D7400000039"
UpdUser="syfre"
uneChaine="some text"
unEntier="1999"
Execute code for topic1


Traitement sur un message de DBQUEUE2 :

Tâche : Tâche de traitement testprocessusautomate
Société : Test SYFRE Workflow
Utilisateur: syfre
Base(s) : TestWorkFlowdup_7
Mode Soc. : Enchaîner sur ces sociétés
Société(s) : 
Début : 11/04/2013 17:18:05
Fin : 11/04/2013 17:18:10
Durée : 4 s
Fichiers : 0
Statut : 0 OK

MyProcessus.Execute
Has a message
MessageClassName="TStaticRegClass"
MessageDatetime="11/04/2013"
MessageUser="syfre"
MessageOID="000000000000000000E30001A112001D"
MessageID="199"
Topic="topic2"
State="1"
OriginalUniqueID=""
idOTP="227"
ObjectClassLabel="Classe message stocké d'une file d'attente"
ObjectClassName="TDBMSTOREDQUEUEMESSAGE"
oid="000000000000000000E30001A112001D"
oiddbmQueue=""
oidShare=""
QueueName="topic2"
queueTopic="topic2"
ShareInfo=""
ShareInstanceInfo=""
ShareInstanceLevel="2"
ShareInstanceRequestedLevel="-1"
ShareLevel="0"
UniqueID="199"
UpdDate="11/04/2013"
UpdStamp="00017D740000003A"
UpdUser="syfre"
uneChaine="some text"
unEntier="1999"
Execute code for topic2




Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels