
项目实战/Mini-Mall
普通网友
这个作者很懒,什么都没留下…
展开
-
MiniMall:Linux环境下持续集成(基于Docker+Jenkins)
MiniMall项目的部署篇,到目前为止,我们说了《Windows环境下的部署》、《Linux环境下的部署(基于Docker)》、《Linux环境下的部署(基于Docker Compose)》。每种部署方式都是循序渐进的,从Windows到Linux服务器,从Docker到Docker Compose。但这几种部署方式都有一个特点,就是部署微服务的工程的时候都要先打成jar包,然后上传到服务器,再手动执行部署。手动去部署,这是一件非常耗时且容易出错的事。而且这也是不现实的部署方式,假设有100个微服务工程原创 2020-05-23 07:52:09 · 332 阅读 · 0 评论 -
MiniMall:Linux环境下的部署(基于Docker Compose)
在这之前,我们学习了如何将mini-mall项目基于Docker部署到Linux服务器,我们一个个启动了项目运行环境所需的容器,比如nginx、mysql等等。然后还通过将微服务打包成jar包,使用java -jar命令启动运行程序。项目所需的环境微服务工程不过话说回来,这么多的容器和微服务工程,如果一个个手动启动的话,我感觉要疯。所以学习使用Docker Compose来部署我们的项目就显得很有必要了。1. Docker ComposeDocker Compose是一个编排多容器分布原创 2020-05-22 08:09:20 · 421 阅读 · 0 评论 -
MiniMall:Linux环境下的部署(基于Docker)(下)
上一篇《MiniMall:Linux环境下的部署(基于Docker)(上)》我们已经把环境需要的一些第三方软件安装完成,今天我们就要把每个微服务在这样的一套环境下部署起来。那就……开始吧。1. mini-mall注意:SpringBoot项目打包成可执行的jar,必须引入spring-boot-maven-plugin插件。1.1 服务注册中心使用mvn clean install打包mall-register-server工程上传到/usr/local/mini-mall/project-原创 2020-05-21 20:16:53 · 371 阅读 · 0 评论 -
MiniMall:Linux环境下的部署(基于Docker)(上)
本文将以图文的形式说一下Mini-Mall项目是如何在Linux环境下基于Docker部署的,主要包括JDK、Docker、MySQL、Nginx、Redis、MongoDB、RabbitMQ、ELK(非必须)、Seata、Zipkin(非必须)等。前提条件:请先准备好CentOS 7服务器环境,服务器内存最好在8G以上。其它说明:远程工具:SecureCRT文件传输工具:WinSCP1. JDK1.1 下载安装包版本:jdk-8u171-linux-x64下载地址:https://w原创 2020-05-20 19:23:44 · 588 阅读 · 0 评论 -
MiniMall:Windows环境下的部署
本文将以图文的形式说一下Mini-Mall项目是如何在Windows环境下部署的,主要包括IDEA、MySQL、Nginx、Redis、MongoDB、RabbitMQ、ELK(非必须)、Seata、Zipkin(非必须)等。1. IDEA因为我们在项目中使用了Lombok工具,所以在IDEA中需要安装Lombok的插件。打开File->Settings->Plugins搜索Lombok然后安装即可。2. MySQL(1)下载并安装mysql5.6版本,下载地址:https://dev.原创 2020-05-19 20:11:56 · 430 阅读 · 0 评论 -
MiniMall:Hutool一点也不糊涂
1. 简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当。Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。官网原创 2020-05-18 07:23:20 · 536 阅读 · 0 评论 -
MiniMall:分布式id生成器,雪花算法了解一下
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而Twitter的SnowFlake算法解决了这种需求,并且该算法生成id的效率是极高的。1. SnowFlakeSnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):0 - 0000000000 0000000000 000原创 2020-05-17 08:05:25 · 319 阅读 · 0 评论 -
MiniMall:项目文档目录
1. 项目介绍mini-mall项目是一个小型的购物中心管理系统。具体来说,它是一个将当前购物中心核心概念和业务抽离出来的后台管理系统。采用前后端分离的架构实现,所有的数据都通过Restful接口进行交互。其中服务端为当前最流行的微服务架构,基于Spring Cloud(H版)技术栈、Redis、MongoDB、RabbitMQ、Elastic Stack等技术实现相关业务功能,在项目功能和技术本身真正做到麻雀虽小五脏俱全。前端则是使用Extjs技术框架实现。2. 源码地址mini-mall(服务端原创 2020-05-16 08:27:10 · 440 阅读 · 0 评论 -
MiniMall:整合Lombok简化接口对象代码
Lombok是一个用于简化接口对象代码的工具,针对接口对象中的样板代码进行简化。下面看两段代码来体会一下,假设现在有一个接口对象,以项目(Store)举例:不使用Lombokpublic class Store implements IsEntity { private String uuid; private String code; private String name; private UsingState state; private String原创 2020-05-16 08:10:20 · 378 阅读 · 0 评论 -
MiniMall:整合Swagger-UI自动生成接口文档
1. 什么是SwaggerSwagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。解析代码里的注解生成JSON文件,通过Swagger UI生成网页版的接口文档,可以在上面做简单的接口调试 。2. 集成Swagger-UI2.1 引入依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2&原创 2020-05-15 07:55:16 · 307 阅读 · 0 评论 -
MiniMall:基础微服务业务和数据结构
基础微服务主要是提供整个项目中基础数据的维护,比如每个业务模块的操作日志,各种商品的库存管理。1. 操作日志操作日志用于记录每个资料的更改信息,比如是谁在什么时候做了什么操作。因为操作日志类似于日志信息,和真正的业务比起来,这一块的数据并不是那么重要的,这里选择将操作日志存储在MongoDB中,其pojo对象如下:@Data@Document(value = "basis_operationlog")@ApiModel(description = "操作日志")public class Oper原创 2020-05-14 08:00:17 · 320 阅读 · 0 评论 -
MiniMall:商品微服务业务和数据结构
商品微服务是主要涉及商品资料的管理,商品入库的管理。1. 商品管理商品是指将商户实际经营的东西在线上作为一笔账款实物承载,比如xxx运动鞋。1.1 业务功能(1)商品资料的属性很简单,主要包括商品名称和商品代码,其中商品代码为商品资料的业务主键,全局唯一。(2)两种业务状态:使用中、已停用。这就表示,商品资料一旦录入系统,是不允许被物理删除的。(3)两种业务操作:启用、停用。已停用业务状态的商品可以重新被启用,已启用业务状态的商品可以被停用。1.2 数据结构CREATE TABLE `pro原创 2020-05-13 14:15:06 · 306 阅读 · 0 评论 -
MiniMall:财务微服务业务和数据结构
账务微服务包括科目管理、账单管理。1. 科目管理科目是指账单中一笔账款的商品,可以理解为是在项目和商户进行交易的一个东西。1.1 业务功能(1)科目资料包括名称和代码,其中代码全局唯一。录入之后就不允许再进行修改。(2)两种业务状态:使用中、已停用。(3)两种业务操作:启用、停用。(4)科目有税额的概念,比如价内税、价外税等等,该属性是用于计算税额的。1.2 数据结构CREATE TABLE `acc_subject` ( `uuid` varchar(38) NOT NULL CO原创 2020-05-12 08:04:29 · 337 阅读 · 0 评论 -
MiniMall:销售微服务业务和数据结构
销售微服务主要是对商户销售数据和业务的管理,包括销售付款方式管理和销售数据录入单管理。1. 销售付款方式销售付款方式资料主要用于记录每笔销售使用的付款方式是什么,比如现金、银行卡等。1.1 业务功能(1)付款方式的属性很简单,主要包括代码和名称,其中代码全局唯一。(2)两种业务状态:使用中、已停用。(3)两种业务操作:启用、停用。已停用业务状态的付款方式可以重新被启用,已启用业务状态的项目可以被停用。1.2 数据结构CREATE TABLE `sales_paymenttype` (原创 2020-05-11 07:50:45 · 295 阅读 · 0 评论 -
MiniMall:招商微服务业务和数据结构
招商微服务主要是和购物中心进行招商的一些资料管理,包括项目资料管理、楼宇楼层资料管理、铺位资料管理、品牌资料管理、业态资料管理、商户资料管理、合同资料管理。再稍微具体点的话,可以将项目、楼宇、楼层、铺位当做是购物中心的物业资源,商户是入驻购物中心与购物中心签订租赁合同的乙方,品牌和业态是商户的经营属性描述。1. 项目资料管理通常情况下,购物中心由集团进行管控,项目是具体到某个购物中心与商户签订租赁合同的甲方。比如上海xxx万达广场、上海xxx正大广场。1.1 业务功能(1)项目资料的属性很简单,主原创 2020-05-10 09:12:57 · 343 阅读 · 0 评论 -
MiniMall:前后端分离,跨域问题怎么搞
先来说说目前前后端分离后,前端和后端是怎么进行数据交互的。在《MiniMall:说一说前端代码框架,你爱看不看》文章中,我们介绍前端采用的是Extjs框架实现,然后通过Nginx进行代理转发。下来看看现在的Nginx代理配置:server { listen 80; server_name api.mall.com; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host;原创 2020-05-09 07:54:00 · 533 阅读 · 0 评论 -
MiniMall:微服务调用链追踪不会?我教你啊
随着业务的发展,系统被拆分成一个个微服务,服务与服务之间的调用关系变得错综复杂,有可能一个请求最终需要调用很多个服务才能完成,当整个请求变慢或者不可用时,我们怎么快速定位,找到问题所在。这时,分布式系统调用链追踪的解决方案就很好的解决了我们的困惑。在本篇文章中,我们将详细介绍如何使用Spring Cloud Sleuth + Zipkin来为我们的微服务架构增加分布式服务跟踪的能力。1. Spr...原创 2020-05-08 10:25:37 · 465 阅读 · 0 评论 -
MiniMall:今天说一下Seata分布式事务解决方案
1. 基础概念1.1 什么是事务事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全成功,要么全失败。比如:一手交钱,一手交货。1.2 本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事...原创 2020-05-07 07:28:55 · 460 阅读 · 0 评论 -
MiniMall:使用Redis实现分布式锁,太简单不过了
1. 什么是锁在一个进程中,当存在多个线程同时操作某个共享资源时,就需要对共享资源做同步,使其在修改这个共享资源时能够线性地执行操作。而实现同步的手段就是锁,当线程准备对共享资源做修改前,先获取锁,如果当前共享资源已经被锁,则进行等待;若没有被锁,则成功获取锁,并允许执行修改。在修改完毕后,释放锁资源,那么下一个线程也是如此,只有获取到锁,才能对共享资源修改。2. 什么是分布式锁分布式锁是为...原创 2020-05-06 07:35:04 · 292 阅读 · 0 评论 -
MiniMall:啥?openFeign接口不能多层继承
先来看看这里说的多层继承是啥意思,假设现在有A、B、C三个接口,继承关系如下:public interface A {}public interface B extends A {}public interface C extends B {}C接口通过B间接继承A接口,这种方式上并没有什么毛病吧?而且也很常见。但是如果这个时候,在C接口上加上@FeignClient注解,默认情况下...原创 2020-04-24 21:30:44 · 1808 阅读 · 1 评论 -
MiniMall:如何优雅地实现错综复杂的条件查询
在上一篇《MiniMall:CRUD的代码是不可能写得?是的,我都帮你写好了》博客中,我们主要分析了MiniMall项目中各个实现层对CRUD的代码封装,个人觉得主要内容都介绍到了,但是有一点还想再具体说说,那就是今天的主题,如何优雅地实现错综复杂的条件查询。这个是什么意思呢?我们看看账务微服务下账单模块搜索界面的搜索条件:这么看是不复杂的对不对?所有的查询条件都能在实体对象中找到,只需要在账...原创 2020-04-24 07:56:03 · 294 阅读 · 0 评论 -
MiniMall:CRUD的代码是不可能写得?是的,我都帮你写好了
虽然从整个项目的角度来说,我们把整个项目拆成了一个个微服务,这一点是有别于单体应用的。但是从一个业务模块本身的实现,不管是单体应用架构还是微服务架构,都会有控制层、业务层、持久层,这一点是不会变的。而我们今天要说的,就是针对每一层的增删改查操作进行架构封装,这几个常见操作的实现基本上都是一样的,实在没有必要在每个业务模块里写重复的代码,我们也不是这样的程序员对不对?友情提示:看本篇博客,最好结...原创 2020-04-23 07:31:00 · 321 阅读 · 0 评论 -
MiniMall:还在到处抛异常捕获异常?统一异常处理很有必要
1. 传统的异常处理对于异常的处理,你通常是不是这样的:public void save(User entity) throws Exception { // xxx}又或者是这样的:public void save(User entity) throws Exception { try { // xxx } catch (Exception e...原创 2020-04-22 07:57:23 · 351 阅读 · 0 评论 -
MiniMall:基于Restful接口说明和响应结果封装
我们的项目是前后端分离的架构,那么在前后端分离的架构中,最重要的是接口和响应结果信息的封装。前端和后端通过接口来进行数据传输和交互,所以我们后端所有对外的接口都是Restful接口,以及对前端的响应都是json格式的数据。1. Restful接口简介首先我们简单了解下什么是Restful接口,下面我们看下对于简单的增删改查,传统写法和使用Restful接口的区别。1.1 传统接口设计...原创 2020-04-21 07:51:19 · 575 阅读 · 0 评论 -
MiniMall:啥也不说了,先把服务注册中心搞起来
我们这是一个微服务架构的项目实战,那么在微服务架构的项目中必然是少不了服务注册中心的。这种关系类似于当前做Java开发的必然是少不了Spring一样,巧的是,服务注册中心的作用也有点类似Spring中的Bean管理。只是服务注册中心管理的是一个个的微服务,其实技术这个东西学到一定程度之后,归纳起来好像都大同小异。实现服务注册的方式也有很多种,比如Dubbo、Zookeeper、Eureka、Co...原创 2020-04-20 20:16:13 · 308 阅读 · 0 评论 -
MiniMall:说一说前端代码框架,你爱看不看
mini-mall-web是mini-mall项目的前端工程,主要采取Extjs技术框架搭建(Extjs官网:https://www.sencha.com/products/extjs )。那么……为什么不是Vue.js,为什么不是React等等主流的前端框架,因为……我不会(You can, You up)。所以个人觉得如果是对Extjs这个技术框架一点都不了解的,也就别研究这个前端工程的代码了...原创 2020-04-19 21:27:03 · 346 阅读 · 0 评论 -
MiniMall:说一说服务端代码框架,撸代码必看
1. 项目介绍mini-mall项目是一个将当前购物中心核心概念和业务抽离出来的后台管理系统。采用当前最流行的微服务架构实现,基于Spring Cloud(H版)技术栈、Redis、MongoDB、RabbitMQ、ELK等技术实现相关业务功能,在项目功能和技术本身真正做到麻雀虽小五脏俱全。其主要业务功能包括招商微服务、销售微服务、财务微服务等内容,招商微服务包括项目管理、楼宇管理、楼层管理、合...原创 2020-04-19 20:29:24 · 423 阅读 · 0 评论 -
MiniMall:一个不容错过的微服务架构实战项目
开门见山,这次想做的仍然是将自己所学的技术通过一个完整的项目整合起来。在这个过程中,我会扮演项目经理、产品经理、开发经理以及一个实实在在码代码的角色,将项目从无到有做出来。然后我会记录在这期间的思考以及如何使用相关技术实现,但可能对于大部分的业务代码不会去记录实现的过程,而是站在上帝的视角挑重点梳理整个项目的业务逻辑。1. 项目介绍项目名称为mini-mall,从字面上就能看出来mini-ma...原创 2020-03-28 22:15:06 · 996 阅读 · 3 评论