« Exemple Consommer plusieurs files d'attente avec un automate » : différence entre les versions

De Wiki1000
Aucun résumé des modifications
(Aucune différence)

Version du 29 août 2013 à 13:44

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

{{#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

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

<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

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