Quel est le moyen approprié de représenter un processeur de file d'attente dans un diagramme de séquence UML?
Je tiens à représenter dans le même diagramme deux systèmes qui sont légèrement couplés à travers une file d'attente. Le premier système, effectue certaines actions et insérer une action dans une file d'attente, l'autre système est toujours à l'écoute et lorsque l'événement apparaît dans la file d'attente, il décide de l'événement et le traite, générant de nouvelles actions. Ils sont tous deux dans le même diagramme car il est de représenter un cas d'utilisation d'intégration qui montre comment travailler ensemble.
Devrais-je créer une ligne de vie représentant la file d'attente?
Devrais-je représenter le processus "écoute" en tant que boîte de boucle contenant: un auto-message avec l'étiquette "Ecouter", Self-Message pour le traitement des messages et des messages représentant l'envoi du résultat.
Comme la file d'attente est un composant important de la séquence que vous présentez, il devrait très certainement être présent avec une ligne de vie.
Comme le consommateur écoute explicitement des événements de la file d'attente, je démarrerais le diagramme avec l'appel listen
appel du consommateur à la file d'attente.
[.____] après cela, le producteur peut insérer son événement dans la file d'attente (éventuellement avec une indication qu'une quantité considérable de temps peut s'écouler entre l'appel listen
appel et l'insertion de l'événement). À ce stade, j'utiliserais deuxretour flèches. Un retour au producteur pour indiquer l'achèvement de l'appel insert
, et l'autre au consommateur pour indiquer l'achèvement de l'appel listen
.
[.____] Ceci est sous l'hypothèse que le producteur et le consommateur exécutent de manière asynchrone.
Cela ressemblerait à ceci:
+---+ +---+ +---+
| P | | Q | | C |
+---+ +---+ +---+
| | listen |
| | <|------- |
| | |
| insert | |
| -------|> ++ |
| < - - - - ++ event |
| ++ - - - - >++
| | ++
| | ++
| | listen ++
| | <|------- ++
| | |
Pour indiquer que le consommateur écoute toujours, j'ai terminé le diagramme avec un appel listen
qui n'est pas retourné.
La mise en œuvre de la réponse de Bart dans la merveilleuse Plantuml pourrait ressembler à ceci, (AB) à l'aide d'un entity
pour distinguer la file d'attente des threads participants:
Le code source correspondant:
participant Producer
entity Queue
Consumer->Queue : dequeue
activate Consumer
...
Producer->Queue : enqueue
activate Producer
Queue-->Consumer
deactivate Consumer
Queue-->Producer
deactivate Producer