UMLシーケンス図でキュープロセッサを表す適切な方法はどれですか。
キューを介して疎結合されている2つのシステムを同じ図で表現したいと思います。最初のシステムは、いくつかのアクションを実行してキューにアクションを挿入します。もう1つのシステムは常にリスニングし、イベントがキューに表示されると、イベントをデキューして処理し、新しいアクションを生成します。両方がどのように連携するかを示す統合ユースケースを表すために、両方が同じ図にあります。
キューを表す生存線を作成する必要がありますか?
「聞く」プロセスを、「聞く」というラベルの付いた自己メッセージ、メッセージを処理するための自己メッセージ、および結果の送信を表すメッセージを含むループボックスとして表す必要があります。
キューは提示するシーケンスの重要なコンポーネントであるため、ライフラインとともに存在することが最も確実です。
コンシューマーがキューからのイベントを明示的にリッスンするので、コンシューマーからキューへのlisten
呼び出しで図を開始します。
その後、プロデューサーはそのイベントをキューに挿入できます(listen
呼び出しとイベントの挿入の間にかなりの時間が経過する可能性があることを示す場合があります)。この時点で、私はtworeturn矢印を使用します。 1つはinsert
呼び出しの完了を示すためにプロデューサーに戻り、もう1つはlisten
呼び出しの完了を示すためにコンシューマーに戻ります。
これは、プロデューサーとコンシューマーが非同期で実行されることを前提としています。
次のようになります。
+---+ +---+ +---+
| P | | Q | | C |
+---+ +---+ +---+
| | listen |
| | <|------- |
| | |
| insert | |
| -------|> ++ |
| < - - - - ++ event |
| ++ - - - - >++
| | ++
| | ++
| | listen ++
| | <|------- ++
| | |
コンシューマーが常にリッスンしていることを示すために、返されていないlisten
呼び出しでダイアグラムを再度終了しました。
素晴らしい PlantUML にBartの回答を実装すると、次のようになります。(ab)entity
を使用して、キューと参加しているスレッドを区別します。
対応するソースコード:
participant Producer
entity Queue
Consumer->Queue : dequeue
activate Consumer
...
Producer->Queue : enqueue
activate Producer
Queue-->Consumer
deactivate Consumer
Queue-->Producer
deactivate Producer
このシナリオに似たもののシーケンス図を描画する方法を意味する場合。
..次に、中央の「タプルスペース」または中央のマルチエージェント調整構造を無意識の無意識としてモデル化しますが、生きている俳優は、膜を通して何かを「食べる」たびにいくつかの香り分子を代謝します。近所のエージェントは、それを「におい」そしてさらに代謝するかもしれません。
靴を履いて
..(1)はい、キューを表すライフラインを作成します
..(2)そして、@ bart-van-ingenと同じ新しいトークンを受信すると、キューによってブロードキャストされた「queue changed」信号も描画します-シェナウ
..(3)そしてはい、私はあなたが提案するように私自身のライフライン上のループボックスとして「リスニング」プロセスを表します
..また、異なる図を使用して異なる視点からシナリオ(ユースケース)を描画することも検討します。主に、「BPMN 2.0-ビジネスプロセスモデルと表記法」という言語を使用して概要図を描画することを考えます(チートシートはここで利用可能: http://www.bpmb.de/images/BPMN2_0_Poster_EN.pdf )