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... »)
 
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 utilisé par le producteur
+
* Une file d'attente DBQUEUE1 sur topic1 utilisée par le producteur
* Une file d'attente sur topic2 utilisé par le producteur
+
* Une file d'attente DBQUEUE2 sur topic2 utilisée par le producteur
* Une file d'attente sur topic% utilisé par le consommateur
+
* 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.  
  
 
===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 test le sujet du message pour exécuter des traitements différent suivant les cas.
  
 
===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 du 12 avril 2013 à 08:40

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