当前位置: 首页 > news >正文

DDD企业级记账软件实战二|从0-1创建用户微服务和记账微服务基于Spring Cloud

大家好,我是大头,职高毕业,现在大厂资深开发,前上市公司架构师,管理过10人团队!
我将持续分享成体系的知识以及我自身的转码经验、面试经验、架构技术分享、AI技术分享等!
愿景是带领更多人完成破局、打破信息差!我自身知道走到现在是如何艰难,因此让以后的人少走弯路!
无论你是统本CS专业出身、专科出身、还是我和一样职高毕业等。都可以跟着我学习,一起成长!一起涨工资挣钱!

DDD记账软件实战二

经过一开始的战略设计和战术设计以后,我们有了一个初步的服务划分

  • 用户服务:管理用户相关的信息
  • 记账服务:管理账本和收支相关的信息

并且,我们已经知道了我们要创建一个什么样的目录结构,每个服务的目录如下:

  • starter: 接口层,包括HTTP接口、队列的消费者、DTO、启动类
  • api: 接口层,提供RPC接口,包括外部RPC接口需要使用的DTO、枚举等
  • application:应用服务层,放应用服务,负责编排领域服务、聚合根等。
  • domain:领域服务层,放领域相关的一切信息,领域服务负责编排聚合根,聚合根负责完成自身的业务逻辑。
  • infrastructure: 基础设施层,放配置、仓储、工厂、对外部的请求、发送MQ消息等。
  • common: 放一些公共信息。

我们这个整体架构图如下:

架构图

除了我们一开始划分好的两个服务以外,还有一些支撑服务,属于不管干啥都需要用到的。

  1. 网关

首先,需要通过网关来进行流量转发、权限校验、负载均衡等。

  • 网关使用Spring Cloud GateWay来实现,网关不需要采用DDD来设计。
  1. 缓存

缓存也是必不可少的一环,缓存使用Redis来实现。

  1. 唯一ID生成

每个服务都需要使用到唯一ID,因此可以使用分布式唯一ID发号器。我们的案例里面使用的是SnowFlake算法进行生成,这个方案有一个缺点就是强依赖系统时钟。对于我们来说已经够用了。

如果需要更加强大的方案可以使用美团开源的Leaf来进行唯一ID生成,Leaf支持号段模式SnowFlake模式,解决了SnowFlake强依赖系统时钟的问题。

  1. 日志收集

日志收集也是必不可少的一环,我们日常都需要将日志统一收集到一起,并提供查询功能。我们直接使用ELK来实现。

  1. 链路追踪

链路追踪也一样,毕竟多个微服务之间需要通过一个唯一请求ID来实现链路追踪,查询出一次请求的微服务以及对应的信息。

  • 我们本次使用SkyWalking来实现链路追踪的能力。
  1. 消息触达服务

不管做什么业务,其实都需要发送一些消息,包括短信消息、邮件消息、微信消息等等。

因此我们同样抽象出一个消息触达服务来执行消息发送功能。

创建用户服务

首先,我们要创建一个spring项目。可以直接使用start.spring.io来创建。

我们选择的是

  • java
  • maven
  • 3.5.4版本
  • java21
  • Jar

接下来输入一些基础信息就可以了。

创建用户服务

点击下面的generate就可以把项目代码下载下来了。

下载下来以后,我们需要调整maven文件和目录结构。

最外层的maven文件内容如下,我们主要引入了下面的一些依赖

  • spring cloud
  • nacos: 配置管理和服务注册发现
  • mysql
  • mybatis plus
  • jwt
  • lombok
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zt.bookkeeping.user</groupId><artifactId>user</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>user</name><description>记账软件用户服务</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>21</java.version><spring-cloud.version>2025.0.0</spring-cloud.version><spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version><project.version>0.0.1-SNAPSHOT</project.version></properties><modules><module>user-domain</module><module>user-application</module><module>user-infrastructure</module><module>user-starter</module><module>user-common</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- 添加Spring Cloud Alibaba依赖管理 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- 内部模块依赖管理 --><dependency><groupId>com.zt.bookkeeping.user</groupId><artifactId>user-domain</artifactId>
http://www.dtcms.com/a/469482.html

相关文章:

  • 昆明建设银行纪念币预约网站网站顶一下代码
  • 深入浅出 C# MVC:从基础实践到避坑指南(附完整代码示例)
  • 【网络】NAT相关知识;NAT的概念、工作机制、防火墙(Netfilter)的作用时间点;
  • JavaEE初级——Thread多线程
  • GJOI 10.9 题解
  • 如何设计一个架构良好的前端请求库?
  • 精灵图(雪碧图)的生成和使用
  • Web 开发 27
  • 网站制作主要公司学校网站开发系统的背景
  • Linux小课堂: 目录操作命令深度解析(LS 与 CD 命令)
  • 面向财经新闻的文本挖掘系统设计与实现(论文)
  • 【Redis-cli操作数据类型】Redis八大数据类型详解:从redis-cli操作到场景落地
  • linux安装海量数据库和操作
  • Redis分片+Sentinel熔断设计TP99控制在15ms内
  • 山海关城乡建设局网站佛山网络科技公司有哪些
  • 我的算法模板1(快速幂、逆元、组合数)
  • 八股-2025.10.11
  • 图片上传网站变形的处理旅游网站建设的概念
  • 集团培训网站建设注册公司需要什么条件和手续
  • Spark RDD详解 —— RDD特性、lineage、缓存、checkpoint、依赖关系
  • 玩转Docker系列专栏大纲
  • 网络攻防技术:信息收集技术
  • spark on hive 还是 hive on spark?
  • 搞懂数据通信不用愁!网络基础 + 参考模型 + VRP 配置,一篇全搞定
  • 解决MacOS上CLion调试的时候容器的值显示为0的问题
  • Docker快速入门——第一章Docker入门
  • 建站助手官网淘宝seo具体优化方法
  • 邯郸网站建设哪儿好网站建设参考文献英文书籍
  • STM32 串口收发数据-中断的方式
  • k8s ingress-nginx 学习