功能开启
项目提供统一的支付中心,提供微信、支付宝等支付渠道的支付、退款等能力,方便业务模块进行快速接入,无需关注各种繁琐的支付 API。
#1. 概述它由如下 3 部分组成:
① yudao-spring-boot-starter-biz-pay (opens new window)组件:对接微信、支付宝等支付,提供统一的 PayClient 支付客户端 (opens new window)。
② yudao-module-pay (opens new window)后端模块:实现支付中心的后端功能,包括支付、退款等能力。
基于 PayClient 支付客户端,对接微信、支付宝等支付渠道。
对内提供 PayOrderApi (opens new window)统一支付 API 能力、PayRefundApi (opens new window)统一退款 API 能力。
③ 支付中心的前端,提供支付中心的管理后台,可进行支付渠道的配置、支付订单、退款单的查看等操作。
Vue2 版本:@/views/pay (opens new window)目录
Vue3 版本:@/views/pay ...
限流熔断
yudao-spring-boot-starter-protection (opens new window) 技术组件,基于 Resilience4j (opens new window) 轻量级的容错组件,实现熔断器、限流器、舱壁隔离、重试、限时器的功能。
#1. 配置说明为了保证项目的启动速度,Resilience4j 默认未开启。如果你需要使用,可以通过按照下图操作来开启:
#2. 使用示例使用的示例,参见 《芋道 Spring Boot 服务容错 Resilience4j 入门 》 (opens new window)文章。
消息队列(Kafka)
Kafka-Springyudao-spring-boot-starter-mq (opens new window)技术组件,基于 Kafka 实现分布式消息队列。
如果你对 Kafka 不太了解,可以看看 《芋道 Spring Boot 消息队列 Kafka 入门》 (opens new window)文档。
如何安装一个 Kafka 服务?
参考 《芋道 Kafka 极简入门 》 (opens new window)文档。
#2. 使用示例以【短信发送】举例子,改造使用 Kafka 作为消息队列。
#2.0 引入依赖与配置① 在 yudao-module-system-biz 模块中,引入 yudao-spring-boot-starter-mq 技术组件。如下所示:
1234<dependency> <groupId>cn.iocoder.boot</groupId> <artifactId>yudao-spring-boot-starter-mq</artifactId></dependency&g ...
消息队列(RabbitMQ)
RabbitMQ-Springyudao-spring-boot-starter-mq (opens new window)技术组件,基于 RabbitMQ 实现分布式消息队列。
如果你对 RabbitMQ 不太了解,可以看看 《芋道 Spring Boot 消息队列 RabbitMQ 入门》 (opens new window)文档。
如何安装一个 RabbitMQ 服务?
参考 《芋道 RabbitMQ 极简入门 》 (opens new window)文档。
#2. 使用示例以【短信发送】举例子,改造使用 RabbitMQ 作为消息队列。
#2.0 引入依赖与配置① 在 yudao-module-system-biz 模块中,引入 yudao-spring-boot-starter-mq 技术组件。如下所示:
1234<dependency> <groupId>cn.iocoder.boot</groupId> <artifactId>yudao-spring-boot-starter-mq</artifactId ...
消息队列(RocketMQ)
RocketMQ-Springyudao-spring-boot-starter-mq (opens new window)技术组件,基于 RocketMQ 实现分布式消息队列。
如果你对 RocketMQ 不太了解,可以看看 《芋道 Spring Boot 消息队列 RocketMQ 入门》 (opens new window)文档。
如何安装一个 RocketMQ 服务?
参考 《芋道 RocketMQ 极简入门 》 (opens new window)文档。
#2. 使用示例以【短信发送】举例子,改造使用 RocketMQ 作为消息队列。
#2.0 引入依赖与配置① 在 yudao-module-system-biz 模块中,引入 yudao-spring-boot-starter-mq 技术组件。如下所示:
1234<dependency> <groupId>cn.iocoder.boot</groupId> <artifactId>yudao-spring-boot-starter-mq</artifactId ...
消息队列(Redis)
yudao-spring-boot-starter-mq (opens new window) 技术组件,基于 Redis 实现分布式消息队列:
使用 Stream (opens new window)特性,提供【集群】消费的能力。
使用 Pub/Sub (opens new window)特性,提供【广播】消费的能力。
疑问:什么是【广播】消费?什么是【集群】消费?
参见《阿里云 —— 集群消费和广播消费 》 (opens new window)文档
#1. 集群消费集群消费,是指消息发送到 Redis 时,有且只会被一个消费者(应用 JVM 实例)收到,然后消费成功。如下图所示:
友情提示:
如果你需要使用到【集群】消费,必须使用 Redis 5.0.0 以上版本,因为 Stream 特性是在该版本之后才引入噢!
#1.1 使用场景集群消费在项目中的使用场景,主要是提供可靠的、可堆积的异步任务的能力。例如说:
短信模块,使用它异步 (opens new window)发送短信。
邮件模块,使用它异步 (opens new window)发送邮件。
相比 《开发指 ...
消息队列(内存)
1. Spring Eventyudao-spring-boot-starter-mq (opens new window)技术组件,提供了 Redis、RocketMQ、RabbitMQ、Kafka 分布式消息队列的封装。
考虑到部分同学的项目对消息队列的要求不高,又不想引入额外部署的消息队列,所以默认使用 Spring Event 实现【内存】级别的消息队列。
疑问:为什么默认不使用 Redis 作为消息队列?
这确实是一种选择,但是想要使用 Redis 实现可靠的消息队列,必须使用 Redis 5.0 版本的 Stream 特性。
这样一方面对 Redis 要求的版本比较高,另一方面大多数同学对 Redis Stream 基本不了解,生产经验不足。
如果你对 Spring Event 不太了解,可以看看 《芋道 Spring Boot 事件机制 Event 入门》 (opens new window)文档。
#2. 使用示例以【短信发送】举例子,我们来看看 Spring Event 的使用。如下图所示:
#2.1 Message 消息在 message 包下,新建 SmsSen ...
定时任务
定时任务的使用场景主要如下:
时间驱动处理场景:每分钟扫描超时支付的订单,活动状态刷新,整点发送优惠券。
批量处理数据:按月批量统计报表数据,批量更新短信状态,实时性要求不高。
年度最佳定时任务:每个月初的工资单的推送!!!
如果你对定时任务了解不多,可以后续阅读 《芋道 Spring Boot 定时任务入门》 (opens new window)文章。
项目基于 Quartz + MySQL 实现分布式定时任务,并提供 [基础设施 -> 定时任务] 菜单,进行定时任务的统一管理,支持动态控制任务的添加、修改、开启、暂停、删除、执行一次等操作。
yudao-spring-boot-starter-job (opens new window)技术组件:基于 Quartz 框架的封装,提供简便的 JobHandler (opens new window)接入,任务的执行、重试,执行日志的记录。
yudao-module-infra 的 job (opens new window)业务模块,提供任务的动态管理,执行日志的存储。
#1. 如何开启?在 application-l ...
验证码
项目基于 AJ-Captcha (opens new window) 实现行为验证码,包含滑动拼图、文字点选两种方式,UI 支持弹出和嵌入两种方式。如下图所示:
滑动拼图
文字点选
疑问:为什么采用行为验证码?
相比传统的「传统字符型验证码」的“展示验证码-填写字符-比对答案”的流程来说,「行为验证码」的“展示验证码-操作-比对答案”的流程,用户只需要使用鼠标产生指定的行为轨迹,不需要键盘手动输入,用户体验更好,更加难以被机器识别,更加安全可靠。
#1. 交互流程
① 用户访问应用页面,请求显示行为验证码
② 用户按照提示要求完成验证码拼图/点击
③ 用户提交表单,前端将第二步的输出一同提交到后台
④ 验证数据随表单提交到后台后,后台需要调用 captchaService.verification (opens new window)做二次校验
⑤ 第 4 步返回校验通过/失败到产品应用后端,再返回到前端
#2. 如何关闭验证码管理后台的登录界面,默认开启验证码。如果需要关闭验证码,操作如下:
① 后端的 application-local. ...
数据库文档
yudao-module-infra 的 DatabaseDocController (opens new window) 类,基于 Screw (opens new window) 工具,生成数据库表结构的文档。
访问 [基础设施 -> 数据库文档] 菜单,可以查看项目的数据库文档。如下图所示:
关于 Screw 的使用讲解,可见 《芋道 Spring Boot 数据表结构文档 》 (opens new window)文章。
