PlantUML绘制时序图

简介:

在日常工作中,经常会涉及到和其他模块的交互,以前绘制这些交互时序图,用的都是visio,但是实际用时感觉不是很方便。

PlantUML是一个可以快速编写的组件。

  • 顺序图
  • 用例图
  • 类图
  • 对象图
  • 活动图
  • 组件图
  • 部署图
  • 状态图
  • 时序图

也支持以下非UML图。

  • JSON数据
  • YAML数据
  • 网络图(nwdiag)
  • 线框图形界面或UI模拟(盐)。
  • 架构图
  • 规范和描述语言(SDL)
  • Ditaa图
  • 甘特图
  • 思维导图图示
  • 工作分解结构图(WBS)
  • 用AsciiMath或JLaTeXMath符号进行数学计算
  • 实体关系图(IE/ER)

此外。

  • 超链接和工具提示
  • 克里奥尔语:富文本、表情符号、unicode、图标
  • OpenIconic图标
  • Sprite图标
  • AsciiMath的数学表达式

图形是用一种简单直观的语言定义的。(见PlantUML语言参考指南)。

新用户可以阅读快速入门页面。也有一个F.A.Q.页面。PlantUML可以在许多其他工具中使用。

图像可以生成PNG、SVG或LaTeX格式。也可以生成ASCII艺术图(只针对序列图)。

从命令行运行PlantUML:

使用PlantUML的命令行语法,将其包含在你自己的脚本或文档工具中。
用PlantUML命令创建一个文本文件,就像这个例子一样,叫做sequenceDiagram.txt 。

@startuml
Alice -> Bob: test
@enduml

运行(或让你的软件调用)PlantUML,使用sequenceDiagram.txt 作为输入。输出是一个图像,它或者出现在其他软件中,或者被写入磁盘上的图像文件。
例如。

java -jar plantuml.jar sequenceDiagram.txt

这将你的序列图输出到一个叫做sequenceDiagram.png 的文件中。

示例:

这里给出,在实际项目中使用PlantUML绘制时序图的第一个示例:

@startuml

skinparam titleFontSize 25
skinparam titleFontColor  #red
title 监控点位上墙时序图

skinparam backgroundColor #LightBlue
skinparam handwritten false
skinparam sequenceParticipant underline

participant client
participant umtio
participant 解码微服务
participant 统一设备
participant 流媒体
participant 设备接入
participant IPC
==解码器点位上电获取==
umtio      ->     统一设备    : 查询解码器接入协议等信息
umtio      <-     统一设备    : 返回解码器入网信息

==kafka推送解码器信息变更通知==
umtio      <-     统一设备    : 解码器信息变更通知

==解码器解码流程==
client     ->     umtio       : 解码请求
umtio      ->     解码微服务  : 发送解码请求/decoder/tasks/ext
解码微服务 ->     流媒体      : 请求流媒体要ipc码流
流媒体     ->     设备接入    : Http请求设备接入要ipc码流
设备接入   ->     统一设备    : 查询ipc的入网信息,包括码流传输方式
统一设备   ->     设备接入    : 返回给设备接入
设备接入   ->     IPC         : 国标请求ipc发给流媒体码流
IPC        ->     流媒体      : Ipc码流发送给流媒体
流媒体     ->     解码微服务  : 流媒体发送码流供解码器解码
umtio      <-     解码微服务  : 解码响应
client     <-     umtio       : 解码响应
@enduml

实际效果:

umtio_ipc.png

第二个示例:

@startuml

skinparam titleFontSize 25
skinparam titleFontColor  #red
title 会议终端上墙时序图

skinparam backgroundColor #LightBlue
skinparam handwritten false
skinparam sequenceParticipant underline

participant client
participant umtio
participant 解码微服务   as decoder
participant 媒体调度服务 as mediaschedule
participant 流媒体       as media
participant 会议接入1    as conf1
participant 会议接入2    as conf2
participant MCU1
participant MCU2

rnote over mediaschedule
一个媒体调度服务
对接多个会议接入服务
endrnote

rnote over conf2
一个会议接入服务
对接一个MCU设备
endrnote

==会议终端点状态变化订阅(用于接收会议终端状态变更通知)==
umtio      ->     mediaschedule: 调度组成员状态订阅

==会议终端点位获取(上电获取全量数据)==
umtio      ->     mediaschedule: 查询会议列表
umtio      <-     mediaschedule: 返回会议列表
umtio      ->     mediaschedule: 获取终端列表
umtio      <-     mediaschedule: 返回终端列表

==会议终端状态变更通知==
umtio      <-     mediaschedule: 调度组成员状态变化通知

==会议终端C节点获取流程==
client     ->     umtio        : UMTMSG_GET_DISPGROUPID_BY_GBNO\n通过与会终端ID查询监看资源ID

    rnote over mediaschedule
        UMTMSG_GET_DISPGROUPID_BY_GBNO为复合接口
        在该消息中判断会议终端是否在调度组,是否在会议
    endrnote

alt  会议终端不在调度组也不在会议中
    rnote over mediaschedule
        会议终端不在调度组也不在会议中,需要创建调度组
    endrnote
    umtio  ->  mediaschedule:创建调度组
    umtio  <-  mediaschedule:创建调度组响应
    
    rnote over umtio
        收到会议终端状态变更通知后发出
    endrnote
    
    client <-  umtio         : UMTMSG_DISPGROUP_RESOURCE_NOTIFY\n终端拉流,资源id生成通知
    umtio  ->  mediaschedule:开始监看设备
    umtio  <-  mediaschedule:开始监看设备响应\n携带C节点
else  会议终端在调度组或者在会议中
    umtio  ->  mediaschedule:开始监看设备
    umtio  <-  mediaschedule:开始监看设备响应\n携带C节点
    client <-  umtio        : UMTMSG_GET_DISPGROUPID_BY_GBNO_ACK
end


==解码器下任务流程==
client     ->     umtio        : 发送解码请求
umtio      ->     decoder      : 发送解码请求/decoder/tasks/ext\n(DeviceID填写C节点编号)
media      <->    decoder      : 码流协商
umtio      <-     decoder      : 解码器解码响应
client     <-     umtio        : 解码器解码响应
@enduml

实际效果:


umtio_mt.png

遇到的问题:

Can't connect to X11 window server using '0.0' as the value of the DISPLAY variable.
终端执行unset DISPLAY即可。

参考文献:

  1. https://www.jianshu.com/p/959ced28ee94

你可能感兴趣的:(PlantUML绘制时序图)