web-dev-qa-db-fra.com

UML: processeur de file d'attente dans un diagramme de séquence

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.

7
NullOrEmpty

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é.

8

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:

enter image description here

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
7
Eugene Beresovsky