Spring Cloud Alibaba 实战(三) - 微服务拆分与编写

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 1 概述1.1 单体架构vs微服务架构单体架构是什么微服务是什么微服务特性微服务全景架构图微服务优缺点微服务适用场景1.2 业务分析与建模项目功能演示与分析微服务拆分项目架构图数据库设计API文档1.3 编写微服务创建小程序创建项目编写用户微服务编写内容微服务2 单体应用一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。

1 概述

1.1 单体架构vs微服务架构

  • 单体架构是什么
  • 微服务是什么
  • 微服务特性
  • 微服务全景架构图
  • 微服务优缺点
  • 微服务适用场景

1.2 业务分析与建模

  • 项目功能演示与分析
  • 微服务拆分
  • 项目架构图
  • 数据库设计
  • API文档

1.3 编写微服务

  • 创建小程序
  • 创建项目
  • 编写用户微服务
  • 编写内容微服务

2 单体应用

一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架构单体应用的方法论就是单体应用架构。

  • 架构图

2.1 单体架构的优点

  • 架构简单
  • 开发、测试、部署方便

2.2 单体架构的缺点

  • 复杂性高
  • 部署慢,频率低
  • 扩展能力受限
  • 阻碍技术创新

3 微服务

一词最早来自于Martin Fowler的一篇微服务文章

  • 翻译
    微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源

API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术

3.1 特性

  • 每个微服务可独立运行在自己的进程里
  • 一系列独立,运行的微服务共同构建起整个系统
  • 每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等
  • 可使用不同的语言与数据存储技术(契合项目情
    况和团队实力)
  • 微服务之间通过轻量的通信机制进行通信,例如通过REST API进行调用;
  • 全自动的部署机制

3.2 全景架构图

3.3 优点

  • 单个服务更易于开发、维护
  • 单个微服务启动较快
  • 局部修改容易部署
  • 技术栈不受限
  • 按需伸缩

3.4 缺点

  • 运维要求高
  • 分布式固有的复杂性
  • 重复劳动

3.5 适用场景

  • 大型、复杂的项目
  • 有快速迭代的需求
  • 访问压力大

3.6 不适用场景

  • 业务稳定
  • 迭代周期长

4 微服务拆分

4.1 拆法

◆ 领域驱动设计( Domain Driven Design )
◆ 面向对象 ( by name./ by verb. )

4.2 最佳实践

◆ 职责划分
◆ 通用性划分

4.3 粒度合理

◆ 良好地满足业务
◆ 幸福感
◆ 增量迭代
◆ 持续演进

  • 拆分
  • 项目架构图

5 数据库设计

5.1 数据表


6 创建小程序

7 前端代码 - JavaEdge-miniapp

7.1 安装Node.js

建议和笔者保持一致

7.2 修改app信息

修改 project.config.json ,按需修改如下两行

"appid": "修改为你的appid"
"projectname": "修改为你的项目名称,尽量用英文",
AI 代码解读



其中,appid在 微信公众平台 - 开发 - 开发设置中可以找到。

7.3 安装 & 启动

安装项目相关依赖 加速!

npm --registry https://registry.npm.taobao.org install
AI 代码解读

开发环境启动部署

npm run dev
AI 代码解读

生产环境构建

npm run build
AI 代码解读

7.4 下载 & 安装微信开发者工具

7.5 修改调用API地址

找到src/utils/api.js ,找到

// 后端接口基础路径
export const BASE_API_URL = '';
AI 代码解读

将其修改为你的后端地址,例如:

export const BASE_API_URL = 'http://localhost:8080';
AI 代码解读

7.6 将代码导入到开发者工具

注意:务必勾选 不校验合法域名...

8 创建项目

8.1 技术选型

  • Spring Boot ( 快速迭代开发 )
  • Spring MVC ( MVC框架 )
    Mybatis ( 持久层框架,操作数据库 ) +通用Mapper
  • Spring Cloud Aliababa ( 分布式 )

8.3 项目结构设计

8.4 整合框架

8.4.1 MyBatis框架 - 通用Mapper

Spring Boot 集成

8.4.1.1 mapper-spring-boot-starter

在 starter 的逻辑中,如果你没有使用 @MapperScan 注解,你就需要在你的接口上增加 @Mapper 注解,否则 MyBatis 无法判断扫描哪些接口。

需要在所有接口上增加 @Mapper 注解。

  • 只需要添加通用 Mapper 提供的 starter 就完成了最基本的集成
  • 无需配置文件
    4.0 之后,增加了一个 @RegisterMapper 注解,通用 Mapper 中提供的所有接口都有这个注解,有了该注解后,通用 Mapper 会自动解析所有的接口,如果父接口(递归向上找到的最顶层)存在标记该注解的接口,就会自动注册上。因此 4.0 后使用通用 Mapper 提供的方法时,不需要再配置这个参数。

8.4.1.2 @MapperScan 注解配置

  • 注意MySQL的配置

8.x带cj

代码生成器 - mappergenerator

通用的过于复杂,大多数情况下使用专业版本即可!

使用该插件可以很方便的生成实体类、Mapper接口以及对应的XML文件。

本篇文档就是讲述如何在 MBG 中使用该插件。

首先对MBG不太了解的可以先阅读下面的文档

Mybatis Geneator 详解

http://blog.csdn.net/isea533/article/details/42102297

使用 Maven 执行MBG

  • SB已内置插件

在插件中配置了配置文件的路径,覆盖和输出详细日志三个参数。

除此之外需要特别注意的是 ,MBG 配置中用到的所有外部代码都必须通过依赖方式配置在这里,否则运行时会提示找不到对应的类而报错。这里有两个必须的依赖,一个是 JDBC 驱动,另一个是 Mapper 的插件。

  • 下面看配置文件generatorConfig.xml:

这里和之前相差不多,只是通过 引入了外部属性文件,在 配置时,使用的属性文件中的参数。

在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate即可(前提是配置了mvn)。

  • 使用MyBatis Generator生成器时,发现Mapper文件中出现字段与连接数据库不符,经过查找发现该表是其他数据库的同名表的字段。
    在构造文件中,这里是generatorConfig.xml添加连接数据库参数如下:

整合Lombok简化代码

  • 生成器中整合

9 用户 & 内容 微服务

业务流程分析

  • 架构图

10 现有架构的问题

  • 地址发生变化怎么办?
  • 如何实现负载均衡?
  • 用户中心挂掉怎么办? .

参考

目录
打赏
0
0
0
4
1949
分享
相关文章
|
2月前
|
微服务——MongoDB实战演练——需求分析
本文档《5-MongoDB实战演练》聚焦于某头条文章评论业务的需求分析与功能实现。基于MongoDB,需完成以下功能:1)提供基本的增删改查API;2)支持通过文章ID查询相关评论;3)实现评论点赞功能。结合实际业务场景,演示MongoDB在数据存储与操作中的应用,附带示意图帮助理解业务结构。
29 2
微服务——MongoDB实战演练——需求分析
微服务——MongoDB实战演练——文章评论的基本增删改查
本节介绍了文章评论的基本增删改查功能实现。首先,在`cn.itcast.article.dao`包下创建数据访问接口`CommentRepository`,继承`MongoRepository`以支持MongoDB操作。接着,在`cn.itcast.article.service`包下创建业务逻辑类`CommentService`,通过注入`CommentRepository`实现保存、更新、删除及查询评论的功能。最后,新建Junit测试类`CommentServiceTest`,对保存和查询功能进行测试,并展示测试结果截图,验证功能的正确性。
44 2
|
2月前
|
微服务——MongoDB实战演练——文章评论实体类的编写
本节主要介绍文章评论实体类的编写,创建了包`cn.itcast.article.po`用于存放实体类。具体实现中,`Comment`类通过`@Document`注解映射到MongoDB的`comment`集合,包含主键、内容、发布时间、用户ID、昵称等属性,并通过`@Indexed`和`@CompoundIndex`注解添加单字段及复合索引,以提升查询效率。同时提供了Mongo命令示例,便于理解和操作。
42 2
微服务——MongoDB实战演练——MongoTemplate实现评论点赞
本节介绍如何使用MongoTemplate实现评论点赞功能。传统方法通过查询整个文档并更新所有字段,效率较低。为优化性能,采用MongoTemplate对特定字段直接操作。代码中展示了如何利用`Query`和`Update`对象构建更新逻辑,通过`update.inc("likenum")`实现点赞数递增。测试用例验证了功能的正确性,确保点赞数成功加1。
37 0
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
37 0
微服务——MongoDB实战演练——文章微服务模块搭建
本节介绍文章微服务模块的搭建过程,主要包括以下步骤:(1)创建项目工程 *article*,并在 *pom.xml* 中引入依赖;(2)配置 *application.yml* 文件;(3)创建启动类 *cn.itcast.article.ArticleApplication*;(4)启动项目,确保控制台无错误提示。通过以上步骤,完成文章微服务模块的基础构建与验证。
32 0
微服务——MongoDB实战演练——表结构分析
本文档来源于数据库articledb,展示了一张图片资源。图片宽度为1207像素,高度607像素,采用内联显示方式。内容涉及图像处理与样式设定,适用于文档或网页设计中多媒体元素的布局参考。图片来源为cdn.nlark.com,支持webp格式并附带水印处理。
31 1
微服务——MongoDB实战演练——表结构分析
微服务——MongoDB实战演练——技术选型
本节主要介绍技术选型中的两个重要工具:**mongodb-driver** 和 **SpringDataMongoDB**。其中,mongodb-driver 是 MongoDB 官方提供的 Java 驱动包,用于连接和操作 MongoDB 数据库,功能类似 JDBC 驱动。通过官方示例可快速上手。而 SpringDataMongoDB 是 Spring 生态的一员,封装了 mongodb-driver,提供了更简洁的 API,方便开发者在 Spring 环境中操作 MongoDB。两者各有优势,可根据实际需求选择合适的技术方案。
38 2
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
725 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等