PlantUML时序图教程:消息传递与控制流详解
PlantUML时序图:消息传递与控制流详解
时序图作为UML中最常用的交互图之一,其核心价值在于清晰展示对象间的消息传递逻辑。本文将深入解析PlantUML中消息传递与控制流的五大核心功能,帮助您绘制专业级时序图。
一、同步与异步消息区分
基础语法
- 同步消息:
->
实线箭头(等待返回) - 异步消息:
-->
虚线箭头(不等待返回)
@startuml
Client -> Server : 同步请求
Server --> Client : 异步响应
@enduml
实践建议
- 关键业务流程建议使用同步消息明确调用关系
- 通知类、事件类消息推荐使用异步表示
- 混合使用时可通过颜色区分(如异步消息设为蓝色)
二、消息箭头样式定制
样式变体
语法 | 样式说明 | 适用场景 |
---|---|---|
-> | 标准实线箭头 | 常规同步调用 |
->o | 空心箭头 | 创建型操作 |
->x | 带X箭头 | 销毁/终止操作 |
->> | 粗箭头 | 重要业务消息 |
@startuml
User ->o Order : 创建订单
Order ->x Payment : 取消支付
Admin ->> Log : 关键操作审计
@enduml
三、消息序列编号
自动编号模式
@startuml
autonumber
A -> B : 请求1
B -> C : 请求2
C --> B : 响应2
B --> A : 响应1
@enduml
手动编号技巧
@startuml
A -> B : [1] 初始化
B -> C : [2] 验证
C -> B : [3] 结果
B -> A : [4] 完成
@enduml
最佳实践:复杂交互建议使用autonumber 10
设置起始编号,配合autonumber stop/resume
控制编号区间
四、控制流操作符
核心控制结构
@startuml
alt 成功情况
A -> B : 操作1
else 失败情况
A -> C : 错误处理
end
loop 3次重试
A -> B : 请求
break 超时
A -> Logger : 记录超时
end
end
opt 缓存命中
B -> Cache : 读取
end
@enduml
嵌套控制流示例
@startuml
alt 用户验证
A -> B : 登录请求
alt 密码正确
B -> DB : 验证
else 密码错误
B -> A : 返回错误
end
else 未注册
A -> C : 注册流程
end
@enduml
调试技巧:复杂控制流建议先用注释'
标记各分支,再逐步实现
五、并行消息处理
par块基础用法
@startuml
par 并行任务
A -> B : 任务1
A -> C : 任务2
A -> D : 任务3
end
@enduml
带同步点的并行
@startuml
par
A -> B : 获取用户数据
and
A -> C : 获取商品数据
and
A -> D : 获取库存数据
end
A -> E : 聚合处理
@enduml
性能优化提示:并行块中消息按垂直位置决定执行顺序,关键路径应置于上部
综合应用案例
@startuml
autonumber
participant "Client" as C
participant "API Gateway" as G
participant "Service A" as A
participant "Service B" as B
C -> G : [1] 业务请求
alt 认证通过
G -> A : [2] 数据查询
par 并行处理
A -> B : [3.1] 子查询1
A -> B : [3.2] 子查询2
end
A -> G : [4] 聚合结果
else 认证失败
G --> C : [x] 401错误
end
G --> C : [5] 最终响应
@enduml
通过合理组合这些元素,您可以清晰地表达:
- 消息的同步/异步特性
- 关键操作的执行顺序
- 条件分支和循环逻辑
- 并行处理流程
- 异常处理路径
掌握这些核心功能后,您绘制的时序图将能准确反映系统真实的交互逻辑,成为团队沟通和技术文档的有力工具。
评论已关闭