PlantUML——时序图

PlantUML时序图

背景

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图,用于描述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。时序图的使用场景非常广泛,几乎各行各业都可以使用。下面,简单介绍如何使用plantUML插件,来绘制时序图。

PlantUML插件下载

首先,打开IDEA,找到setting,然后选择plugins,搜索PlantUML,找到如下插件,点击下载,然后重启idea,即可使用plantUML插件。
在这里插入图片描述
如果使用的是VSCode,选择扩展,然后搜索PlantUML,下载即可使用
在这里插入图片描述

PlantUML绘制时序图

首先创建一个PlantUML 文件,然后选择Sequence模板
在这里插入图片描述
在这里插入图片描述
创建完毕后,会自动生成一个时序图的模板
在这里插入图片描述

时序图绘制基础

下面我们以用户注册为例,绘制一个基础的时序图,并依次讲解每一个元素的具体含义。在注册链路中,首先用户在浏览器上填写注册表单,点击发送按钮,会调用后端的注册服务去创建注册信息,在注册服务中,会调用账号服务创建对应的账号信息,以及绑定一些关联关系,创建成功后,调用登录服务去生成对应的登录token,下发登录态,最后发送相关的注册消息给下游。整体的时序图代码如下所示:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User
participant "浏览器" as browser
participant "register-service" as registerService
participant "user-service" as userService
participant "login-service" as loginService
participant "下游" as merchantUser -> browser:填写注册表单,点击注册
browser -> registerService: registerFacade#register
registerService -> userService: accountFacade#createAccount
userService --> registerServiceregisterService -> loginService: loginService#login
loginService --> registerService: 登录态tokenregisterService ->> merchant: 发送注册成功消息
registerService --> browser
browser --> User
@enduml

在这里插入图片描述
其中,上述代码相关的元素,表示的含义如下:

元素含义
actor系统角色,可以是人或其他系统,子系统,以一个小人图标表示
participant参与者,一般是调用的服务或组件
->同步消息,消息的发送者将控制传递给消息的接收者
- - >返回消息,表示从过程调用返回
->>异步消息,消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接收者返回消息或控制
生命线

在时序图中,一般我们还会对每一个参与的角色,画上相关的生命线,用于表示对象的调用过程。在plantUML中,我们用activate表示激活生命线,用deactivate表示终止生命线。
我们改造刚才的代码,改造结果如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User
participant "浏览器" as browser
participant "register-service" as registerService
participant "user-service" as userService
participant "login-service" as loginService
participant "下游" as merchantactivate User
User -> browser:填写注册表单,点击注册
activate browser browser -> registerService: registerFacade#register
activate registerServiceregisterService -> userService: accountFacade#createAccount
activate userService
userService --> registerService
deactivate userServiceregisterService -> loginService: loginService#login
activate loginService
loginService --> registerService: 登录态token
deactivate loginServiceregisterService ->> merchant: 发送注册成功消息
registerService --> browser
deactivate registerServicebrowser --> User
deactivate browserdeactivate User
@enduml

在这里插入图片描述

颜色

在plantUML中,我们可以通过设置消息、文本、生命线的问题,来提升时序图的视觉效果,以更好地区分每个系统以及系统与系统之间地调用关系,突出时序图的重点信息。
对于actor和参与者,我们在定义的时候设置颜色信息,如下代码所示:

actor "用户" as User #orange
participant "浏览器" as browser #6ACCEF
participant "register-service" as registerService #6ACCEF
participant "user-service" as userService #6ACCEF
participant "login-service" as loginService #6ACCEF
participant "下游" as merchant #6ACCEF

对于消息,我们在第一个"-"后面,通过加上[#颜色]这种方式,来设置对应的消息颜色,如下代码所示:

registerService -[#red]>> merchant: 发送注册成功消息

对于文本信息,我们通过在文本前面,加上color:#颜色的方式,设置文本内容颜色,如下代码所示:

registerService -[#red]>> merchant: <color:#red>发送注册成功消息

对于生命线,我们在激活生命线的时候,在后面加上颜色信息,如下代码所示:

activate User #orange
activate browser #6ACCEF

整体改动参考代码如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "用户" as User #orange
participant "浏览器" as browser #6ACCEF
participant "register-service" as registerService #6ACCEF
participant "user-service" as userService #6ACCEF
participant "login-service" as loginService #6ACCEF
participant "下游" as merchant #6ACCEFactivate User #orange
User -> browser:填写注册表单,点击注册
activate browser #6ACCEFbrowser -> registerService: registerFacade#register
activate registerService  #6ACCEFregisterService -> userService: accountFacade#createAccount
activate userService  #6ACCEF
userService --> registerService
deactivate userServiceregisterService -> loginService: loginService#login
activate loginService #6ACCEF
loginService --> registerService: 登录态token
deactivate loginServiceregisterService -[#red]>> merchant: <color:#red>发送注册成功消息
registerService --> browser
deactivate registerServicebrowser --> User
deactivate browserdeactivate User
@enduml

在这里插入图片描述

条件判断

在时序图中,有时候我们会涉及到一些条件判断内容,对于条件判断,我们可以使用alt-else-end来区分不同条件下的调用信息。以登录为例,在登录的时候,如果账密校验通过后,会判断当前账号的状态,如果状态校验通过,生成相关的登录态token,如果校验不通过,那么生成核身token,用户拿到核身token后,去完成发送验证码和校验验证码等核身操作,核身通过后,才能正常登录,整体流程如下:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "User" as user
participant "login-service" as loginService
participant "account-service" as accountService
participant "token-service" as tokenServiceuser -> loginService:账密登录
loginService -> accountService:密码校验
accountService --> loginService
loginService -> accountService:状态校验
alt 状态校验通过accountService --> loginServiceloginService -> tokenService:生成登录态tokentokenService --> loginService
else 账号被盗accountService --> loginServiceloginService -> tokenService:生成核身tokentokenService --> loginService
endloginService --> user
@enduml

在这里插入图片描述
对于不同的条件片段,也可以设置对应的背景颜色,用于区分,如下所示:

@startuml
'https://plantuml.com/sequence-diagramautonumberactor "User" as user
participant "login-service" as loginService
participant "account-service" as accountService
participant "token-service" as tokenServiceuser -> loginService:账密登录
loginService -> accountService:密码校验
accountService --> loginService
loginService -> accountService:状态校验
alt #6ACCEF  状态校验通过accountService --> loginServiceloginService -> tokenService:生成登录态tokentokenService --> loginService
else #orange 账号被盗accountService --> loginServiceloginService -> tokenService:生成核身tokentokenService --> loginService
endloginService --> user
@enduml

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473415.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MYSQL】分库分表

一、什么是分库分表 分库分表就是指在一个数据库在存储数据过大&#xff0c;或者一个表存储数据过多的情况下&#xff0c;为了提高数据存储的可持续性&#xff0c;查询数据的性能而进行的将单一库或者表分成多个库&#xff0c;表使用。 二、为什么要分库分表 分库分表其实是两…

Spring纯注解开发

在我的另一篇文章中&#xff08;初识Spring-CSDN博客&#xff09;&#xff0c;讲述了Bean&#xff0c;以及通过xml方式定义Bean。接下来将讲解通过注解的方法管理Bean。 我们在创建具体的类的时候&#xff0c;可以直接在类的上面标明“注解”&#xff0c;以此来声明类。 1. 常…

git push时报错! [rejected] master -> master (fetch first)error: ...

错误描述&#xff1a;在我向远程仓库push代码时&#xff0c;即执行 git push origin master命令时发生的错误。直接上错误截图。 错误截图 错误原因&#xff1a; 在网上查了许多资料&#xff0c;是因为Git仓库中已经有一部分代码&#xff0c;它不允许你直接把你的代码覆盖上去…

java常用工具包介绍

Java 作为一种广泛使用的编程语言&#xff0c;提供了丰富的标准库和工具包来帮助开发者高效地进行开发。这些工具包涵盖了从基础的数据类型操作到高级的网络编程、数据库连接等各个方面。下面是一些 Java 中常用的工具包&#xff08;Package&#xff09;及其简要介绍&#xff1…

latex中,两个相邻的表格,怎样留一定的空白

目录 问题描述 问题解决 问题描述 在使用latex写论文时&#xff0c;经常表格需要置顶写&#xff0c;则会出现两个表格连在一起的情况。下一个表名容易与上面的横线相连&#xff0c;如何通过明令&#xff0c;留出一定的空白。 问题解决 在第二个表格的 \centering命令之后…

react中如何在一张图片上加一个灰色蒙层,并添加事件?

最终效果&#xff1a; 实现原理&#xff1a; 移动到图片上的时候&#xff0c;给img加一个伪类 &#xff01;&#xff01;此时就要地方要注意了&#xff0c;因为img标签是闭合的标签&#xff0c;无法直接添加 伪类&#xff08;::after&#xff09;&#xff0c;所以 我是在img外…

C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中

人工智能软件和硬件技术正在迅速发展。我们每天都能看到新的进步。其中一个巨大的飞跃是我们拥有更多基于自然语言处理&#xff08;NLP&#xff09;和深度学习&#xff08;DL&#xff09;机制的逻辑性更强的AI聊天应用。有许多AI工具可以用来开发由C、C、Delphi、Python等编程语…

【项目开发】URL中井号(#)的技术细节

未经许可,不得转载。 文章目录 前言一、# 的基本含义二、# 不参与 HTTP 请求三、# 后的字符处理机制四、# 的变化不会触发网页重新加载五、# 的变化会记录在浏览器历史中六、通过 window.location.hash 操作七、onhashchange 事件八、Google 对 # 的处理机制前言 2023 年 9 月…

AUTOSAR_EXP_ARAComAPI的7章笔记(5)

☞返回总目录 相关总结&#xff1a;典型的 SOME/IP 多绑定用例总结 7.3.3 典型的SOME/IP多绑定用例 在前面的章节中&#xff0c;我们简要提到&#xff0c;在一个典型的SOME/IP 网络协议的部署场景中&#xff0c;AP SWC不太可能自己打开套接字连接来与远程服务通信。为什么不…

Jenkins下载安装、构建部署到linux远程启动运行

Jenkins详细教程 Winodws下载安装Jenkins一、Jenkins配置Plugins插件管理1、汉化插件2、Maven插件3、重启Jenkins&#xff1a;Restart Safely插件4、文件传输&#xff1a;Publish Over SSH5、gitee插件6、清理插件&#xff1a;workspace cleanup system系统配置1、Gitee配置2、…

Flutter:Dio下载文件到本地

import dart:io; import package:dio/dio.dart;main(){// 创建dio对象final dio Dio();// 下载地址var url https://*******.org/files/1.0.0.apk;// 手机端路径String savePath Directory.systemTemp.path/ceshi.apk;print(savePath);downLoad(dio,url,savePath); }downLo…

【C++笔记】C++三大特性之多态

【C笔记】C三大特性之多态 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之多态前言一.多态1.1 多态的概念1.2 虚函数1.3 虚函数的重写/覆盖1.4 多态的定义及实现 二.虚函数重写的⼀些其他问题2.1 协变(…

2.STM32之通信接口《精讲》之USART通信

有关通信详解进我主页观看其他文章&#xff01;【免费】SPIIICUARTRS232/485-详细版_UART、IIC、SPI资源-CSDN文库 通过以上可以看出。根据电频标准&#xff0c;可以分为TTL电平&#xff0c;RS232电平&#xff0c;RS485电平&#xff0c;这些本质上都属于串口通信。有区别的仅是…

麒麟V10,arm64,离线安装docker和docker-compose

文章目录 一、下载1.1 docker1.2 docker-compose1.3 docker.service 二、安装三、验证安装成功3.1 docker3.2 docker-compose 需要在离线环境的系统了里面安装docker。目前国产化主推的是麒麟os和鲲鹏的cpu&#xff0c;这块的教程还比较少&#xff0c;记录一下。 # cat /etc/ky…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

三十九、Python(pytest框架-中)

一、执行用例的方式 1.工具执行 2.在终端使用命令行运行 命令&#xff1a;pytest -s 用例代码文件 -s 的作用是输出显示代码中的 print。 3.在主函数main中执行 if __name__ "__main__": # 主函数pytest.main([-s, 用例代码文件]) import pytestclass TestDemo…

丹摩征文活动|丹摩助力selenium实现大麦网抢票

丹摩征文活动&#xff5c;丹摩助力selenium实现大麦网抢票 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强大工具。通过租赁GPU资源&#xff0c;丹…

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化&#xff0c;有现成的解决方案&#xff1a;①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数&#xff0c;根本就不是把数据发送到网络中&#xff01;本质都是…

大数据-226 离线数仓 - Flume 优化配置 自定义拦截器 拦截原理 拦截器实现 Java

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

AI行业动态:AGI预测、模型进化与工具革新

本周&#xff0c;人工智能&#xff08;AI&#xff09;领域的新闻层出不穷&#xff0c;从关于通用人工智能&#xff08;AGI&#xff09;何时到来的预测&#xff0c;到模型训练与推理技术的突破&#xff0c;再到各种实用工具的更新迭代&#xff0c;精彩纷呈。让我们一起深入了解这…