海量订单系统微服务开发
订单系统是电商平台中一个非常重要的组成部分,而且它还是一个具有巨大流量和高并发访问的系统,与订单相关的服务涉及库存、支付、物流等。在设计订单系统时,我们选择使用支持海量数据的NoSQL 数据库MongoDB,配合使用反应式的Spring Data MongoDB,实现高并发设计。
本章实例项目代码可从本书源代码中下载,在IDEA 中检出,或通过页面直接下载使用。检出后请获取分支版本V2.1。在这个分支中包含以下几个模块:
- order-object:订单公共对象设计。
- order-restapi:订单微服务接口应用设计。
- order-web:订单后台管理应用设计。
使用MongoDB支持海量数据
MongoDB是一个分布式数据库,对于开发调试,我们只需一个单机版即可。
使用 Mongo插件
如果使用的是IDEA开发工具,则为了方便查询数据库,也可以安装一个Mongo客户端插件。打开 IDEA 设置,在插件上搜索Mongo进行安装即可,安装完成后,如图8-1所示。
安装插件之后,就可以在设置中通过Other Settings连接 MongoDB,使用客户端来查询数据。图8-2是一个本地数据库连接的配置实例。
MongoDB数据源相关配置
我们在模块 order-restapi中进行MongoDB的设计,首先在项目对象模型pom.xml中引入相关依赖引用,代码如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>
这里引用的是反应式Spring Data MongoDB组件,它可以支持无事务的高并发非阻塞的异步请求调用。
在模块的配置文件 applicaption.yml 中,设定连接MongoDB服务器的数据源配置,代码如下所示:
#datasourcespring:
data:
mongodb:
host: localhostport: 27017
#矫正Mongo查询时间jackson:
timezone: GMT+8
这里是开发环境的一个本地连接的简单配置,如果是生产环境,则可以设置用户名和密码,并且指定使用的数据库名称。
这里是开发环境的一个本地连接的简单配置,如果是生产环境,则可以设置用户名和密码,并且指定使用的数据库名称。
因为MongoDB使用了格林尼治时间(GMT),所以为了显示东八区的正确时间,我们在数据查询时做了“GMT+8”的配置。
订单文档建模
订单数据主要由订单及其明细数据组成,由于订单从生成开始到交易结束,会发生一系列状态变化,而这些状态一般可以固定下来,所以可以使用一个枚举类来实现。
订单及其明细数据
订单文档的建模由Order类实现,代码如下所示:
@Document
@Data
@NoAr