时序图

  • 基于PlantUML
  • 时序图
PlantUML制图-概述

时序图

基础

  • -> 表示实现
  • --> 表示虚线

sequence-1.png

1
2
3
4
5
6
7
@startuml sequence-1
服务A -> 服务B: 调用
服务B --> 服务A: 返回

服务A -> 服务B: 调用2
服务B --> 服务A: 返回2
@enduml

实体样式

  • actor 小人
  • boundary 边界
  • control 控制
  • entity 实体
  • database 数据库
  • collections 集合
  • participant 方框(默认使用这个)

sequence-2.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@startuml sequence-2
actor 小人 as Foo1
boundary 边界 as Foo2
control 控制 as Foo3
entity 实体 as Foo4
database 数据库 as Foo5
collections 集合 as Foo6
participant 方框 as Foo7

Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database
Foo1 -> Foo6 : To collections
Foo1 -> Foo7 : To participant
@enduml

颜色与别名

  • 样式定义后面接 #{颜色}/{渐变色},#{颜色}\{渐变色}, #{颜色}|{渐变色}.
  • 使用 as 可以使用别名.

sequence-3.png

1
2
3
4
5
6
7
8
9
10
11
@startuml sequence-3
actor 小人2 as Bob2 #red/green
actor 小人1 as Bob1 #FFF/000
participant Alice
participant "I have a really\nlong name" as L #99FF99

Alice->Bob1: 发送
Bob1->Alice: 响应
Alice->Alice: 自发自收
Bob1->L: biubiu
@enduml

实体顺序

  • order 可以自定义显示顺序

sequence-4.png

1
2
3
4
5
@startuml sequence-4
participant Last order 30
participant Middle order 20
participant First order 10
@enduml

箭头样式

  • -> 普通箭头
  • ->x 不可通
  • ->> 细箭头
  • -\ 单边箭头
  • -\\ 单边细箭头
  • --\\ 虚线单边细箭头
  • ->o 普通箭头加圆点
  • o\\-- 虚线单边下箭头加圆点
  • <-> 双向箭头
  • <->o 双向箭头加圆点

sequence-5.png

1
2
3
4
5
6
7
8
9
10
11
12
@startuml sequence-5
Bob -> Alice
Bob ->x Alice
Bob ->> Alice
Bob -\ Alice
Bob -\\ Alice
Bob --\\ Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml

箭头颜色

  • 箭头-之间加入[{颜色值}], 颜色可以为名字和hex值

sequence-6.png

1
2
3
4
@startuml sequence-6
Bob -[#red]> Alice : hello
Alice -[#0000FF]->Bob : ok
@enduml

序号

  • autonumber 可以开启序号, 序号自增.
  • autonumber num step 可以显式设置当前序号和自增步数.
  • autonumber stop 可以不纳入记步.
  • autonumber resume 1 "<b>[0]" 可以刷新步数设置为1, 并且可以配置序号样式, 0或者#能代表数字.

sequence-7.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@startuml sequence-7
autonumber
Bob -> Alice : 请求
Bob <- Alice : 响应

autonumber 15
Bob -> Alice : 请求
Bob <- Alice : 响应

autonumber stop
Bob -> Alice : dummy

autonumber 40 10 "<font color=red><b>Message 0 "
Bob -> Alice : 请求
Bob <- Alice : 响应

autonumber resume 1 "<b>[0]"
Bob -> Alice : 请求
Bob <- Alice : 响应
@enduml

生成多图

  • header 通用图头
  • footer 通用图尾 %page%%lastpage% 可以代表总数和当前图索引
  • title 某页图头
  • newpage 开启新页
  • newpage xxxx 开启新页, 并且设置图头
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@startuml sequence-8
header 图头
footer 图尾 %page% of %lastpage%
title 图标题

服务A -> 服务B : 消息1
服务B -> 服务A : 消息2

newpage

服务A -> 服务B : 消息3
服务B -> 服务A : 消息4

newpage A title for the\nlast page

服务A -> 服务B : 消息5
服务B -> 服务A : 消息6
@enduml

分组框

  • alt else类似于 if-else, 后面接注释
  • group分组, 后接组名
  • loop 表示循环体内容, 后接注释
  • 都需要在结束的地方加 end

sequence-9.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@startuml sequence-9
Alice -> Bob: 请求

alt 成功情况

Bob -> Alice: 成功的处理流程

else 失败情况

Bob -> Alice: 失败的处理流程
group 这是一个分组
Alice -> Log : 循环开始
loop 循环 1000 times
Alice -> Bob: 循环内容
end
Alice -> Log : 循环结束
end

else 其他情况

Bob -> Alice: 非成功失败的处理流程

end
@enduml

日志

  • note left: 日志内容
  • note right end note 日志块

sequence-10.png

1
2
3
4
5
6
7
8
9
10
11
12
13
@startuml sequence-10
Alice->Bob : hello
note left: 左边的日志

Bob->Alice : ok
note right: 右边的日志

Bob->Bob : 块状日志
note right
块内内容
直接就能换行
end note
@enduml

注释样式

  • note left of XXX #{颜色} 指定在哪个实体旁边, 可以指定颜色
  • note over XXX 在XXX上面的注释
  • note over XXX, YYY 在XXX和YYY上面的注释

sequence-11.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@startuml sequence-11
participant Alice
participant Bob
note left of Alice #aqua
花里胡哨的注释
指定这个注释在Alice左边
end note

note right of Alice: 指定这个注释在Alice右边

note over Alice: 指定这个注释在Alice中间

note over Alice, Bob #FFAAAA: 指定这个注释在Alice和Bob中间

note over Bob, Alice
指定这个注释在Alice和Bob中间
支持块注释
end note
@enduml

注释形状

  • hnote 菱形注释块
  • rnote 四四方方
  • note 便签纸形状

sequence-12.png

1
2
3
4
5
6
7
8
@startuml sequence-12
caller -> server : 过程1
hnote over caller : 菱形注释块
caller <- server : 过程2
rnote over server
四四方方的注释块
endrnote
@enduml

各种牛逼的样式

sequence-13.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
@startuml sequence-13
Alice -> Bob : hello --there--
... 省略 ~~内容~~ 用来表示延迟 ...
Bob -> Alice : ok
note left
This is **bold**
This is //italics//
This is ""monospaced""
This is --stroked--
This is __underlined__
This is ~~waved~~
end note
== 各种牛逼的样式 ==
note right of Bob
This is <back:cadetblue><size:18>displayed</size></back>
__left of__ Alice.
end note

note right of Bob
<u:red>This</u> is <color #118888>displayed</color>
**<color purple>left of</color> <s:red>Alice</strike> Bob**.
end note

note right of Bob
<w:#FF33FF>This is hosted</w> by <img img/logo_v2.png>
end note

note right of Bob
Example of simple table
|= |= table |= header |
| a | tabletabletabletable | row |
| b | table | row |
end note

note right of Bob
:Here is the result
|= |= table |= header |
| a | table | row |
|<#FF8080> red |<#80FF80> green |<#8080FF> blue |
<#yellow>| b | table | row |;
end note

note right of Bob
Example of Tree
|_ First line
|_ **Bom(Model)**
|_ prop1
|_ prop2
|_ prop3
end note

note right of Bob
* Bullet list
* Second item
** Sub item
end note

note right of Bob
<&phone> <&wifi> <&map> 等...
end note

== 引用类型(类似于注释) ==

|||

ref over Alice, Bob : ref不支持 left/right

||100||

ref over Bob
ref仅支持 **over**
<&phone> <&wifi> <&map> 等...
end ref
@enduml

icon

sequence-14.png

1
2
3
@startuml sequence-14
listopeniconic
@enduml

生命线

  • activate XXX #{颜色值} 开启生命线, 可以设置颜色
  • deactivate 停止生命线
  • destroy 关闭生命线
  • 生命线可叠加, 但是要注意颜色区分

sequence-15.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@startuml sequence-15
participant User

User -> A: 下面启动A的生命线
activate A

A -> B: 下面启动B的生命线
activate B #BBBBBB

B -> C: 下面启动C的生命线
activate C #DarkSalmon
C --> B: 下面**销毁**C的生命线
destroy C
activate B #BBBBFF

B --> C: 启动B的二段生命线
activate C #DarkSalmon
C --> B: 启动B的二段生命线
destroy C
destroy B

B --> A: 下面关闭B的生命线
deactivate B

A -> User: 下面**销毁**A的生命线
destroy A
@enduml

临时创建实体

  • 不用participant 事先生命实体, 需要时用 create 即可创建
  • create {样式} 名字 可以指定样式

sequence-16.png

1
2
3
4
5
6
7
8
9
10
11
12
13
@startuml sequence-16
Bob -> Alice : hello

create Other
Alice -> Other : new
Other --> Alice : return

create control String
Alice -> String
String -> Alice

Alice --> Bob : ok
@enduml

未知来源箭头

  • [-> ->] [<- <-] 来源未知的箭头

sequence-17.png

1
2
3
4
5
6
7
8
@startuml sequence-17
[-> Bob : 未知来源的输入
Bob -> Alice : 1
Alice ->] : 未知去向的输出
Alice <-] : 未知来源的返回
Bob <- Alice : 2
[<- Bob : 未知来源的返回
@enduml

标题样式

  • title 设置标题 可以使用下划线,黑体,删除线等

sequence-18.png

1
2
3
4
5
6
7
@startuml sequence-18
title __下划线__ **黑体** --删除线--

Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response

@enduml

标题样式高级

  • title end title 中间可以定各种样式的文本图案

sequence-19.png

1
2
3
4
5
6
7
8
9
10
11
12
13
@startuml sequence-19

title
Here is the result
|= |= table |= header |
| a | table | row |
|<#FF8080> red |<#80FF80> green |<#8080FF> blue |
|<#yellow> | b | table | row |
end title

Alice -> Bob: Authentication Request
Bob -> Alice: Authentication Response
@enduml

颜色块

  • box 标题名 #{颜色值} 抱起来声明的实体可以被框住, 并可以定义颜色

sequence-20.png

1
2
3
4
5
6
7
8
9
10
@startuml sequence-20
box "标题" #LightBlue
participant Bob
participant Alice
end box
participant Other

Bob -> Alice : hello
Alice -> Other : hello
@enduml

移除脚实体

  • hide 可以移除脚实体

sequence-21.png

1
2
3
4
5
6
7
@startuml sequence-21
hide footbox
title 脚移除

Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response
@enduml

样式自定义

sequence-22.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@startuml sequence-22

skinparam backgroundColor #A9DCDF
skinparam handwritten true
skinparam ParticipantPadding 20
skinparam BoxPadding 10

skinparam sequence {
ArrowColor DeepSkyBlue
ActorBorderColor DeepSkyBlue
LifeLineBorderColor blue
LifeLineBackgroundColor #A9DCDF

ParticipantBorderColor DeepSkyBlue
ParticipantBackgroundColor DodgerBlue
ParticipantFontName Impact
ParticipantFontSize 17
ParticipantFontColor #A9DCDF

ActorBackgroundColor aqua
ActorFontColor DeepSkyBlue
ActorFontSize 17
ActorFontName Aapex
}

box "标题"
participant Bob
participant Alice
end box
participant Other

Bob -> Alice : hello
Alice -> Other : hello

note right of Other
自定义样式请看:__http://plantuml.com/zh/skinparam__
end note
@enduml