Exemple Consommer plusieurs files d'attente avec un automate
De Wiki1000
(Différences entre les versions)
(Page créée avec « __TOC__ 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 al... ») |
(→Code snippet du processus de traitement) |
||
(3 révisions intermédiaires par un utilisateur sont masquées) | |||
Ligne 4 : | Ligne 4 : | ||
===Configuration des files d'attente=== | ===Configuration des files d'attente=== | ||
Nous allons utiliser trois files d'attente : | Nous allons utiliser trois files d'attente : | ||
− | * Une file d'attente sur topic1 | + | * Une file d'attente DBQUEUE1 sur topic1 utilisée par le producteur |
− | * Une file d'attente sur topic2 | + | * Une file d'attente DBQUEUE2 sur topic2 utilisée par le producteur |
− | * Une file d'attente sur topic% | + | * 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. | + | {{#images:image2.png|msgqueue/example4}} |
+ | |||
+ | {{#images:image3.png|msgqueue/example4}} | ||
+ | |||
+ | {{#images:image1.png|msgqueue/example4}} | ||
+ | |||
+ | L'utilisation du caractère joker % permet de consommer tous les messages de sujet correspondant. | ||
+ | |||
+ | La file d'attente DBQUEUELIKE va donc permettre de consommer les messages produits sur les files d'attente DBQUEUE1 et DBQUEUE2 | ||
===Configuration de l'automate=== | ===Configuration de l'automate=== | ||
+ | '''Evènements :''' | ||
+ | |||
+ | {{#images:image5.png|msgqueue/example4}} | ||
+ | |||
+ | L'évènement file d'attente utilise la file DBQUEUELIKE pour consommer à la fois les messages produits sur DBQUEUE1 et DBQUEUE2 | ||
+ | |||
+ | '''Automate :''' | ||
+ | |||
+ | {{#images:image4.png|msgqueue/example4}} | ||
===Code snippet du processus de traitement=== | ===Code snippet du processus de traitement=== | ||
+ | |||
+ | <source lang="delphi"> | ||
+ | //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; | ||
+ | </source> | ||
+ | |||
+ | Le code peut tester le sujet du message pour exécuter des traitements différents suivant l'origine du message. | ||
===Exécution=== | ===Exécution=== | ||
+ | |||
+ | Traitement sur un message de DBQUEUE1 : | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Traitement sur un message de DBQUEUE2 : | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
[[Category:File d'attente]] | [[Category:File d'attente]] |
Version actuelle en date du 29 août 2013 à 15:47
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.
La file d'attente DBQUEUELIKE va donc permettre de consommer les messages produits sur les files d'attente DBQUEUE1 et DBQUEUE2
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 peut tester le sujet du message pour exécuter des traitements différents suivant l'origine du message.
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 1 Bots & Crawlers 0 |