Exemple Consommer plusieurs files d'attente avec un automate
De Wiki1000
Version du 12 avril 2013 à 08:40 par Syfre (discuter | contributions)
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
L'utilisation du caractère joker % permet de consommer tous les messages de sujet correspondant.
Configuration de l'automate
Evènements :
L'évènement file d'attente utilise la file DBQUEUELIKE pour consommer à la fois les messages produits sur DBQUEUE1 et DBQUEUE2
Automate :
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 |