目录
SpringCloud官网:https://spring.io/projects/spring-cloud
导入hmall单体项目
在Docker中我们已经部署了hmall项目,项目资源默认是用dev中的Mysql的配置,所以我们在上一篇文章Docker就能成功运行,但是我们想让他改成本地的local就要如下步骤




认识微服务
单体架构

微服务架构

SpringCloud

国内公司大多都用JDK8或者JDK11,2022.0.xSpringCloud对应的是3.0.x的SpringBoot版本底层必须JDK17以上,所以我们学习2021.0.x的SpringCloud版本。

在pom.xml文件中我们有如下:

Ctrl+B进入Spring-cloud-dependencies中可以看到里面有SpringCloud中的组件以及版本控制,几乎所有的SpringCloud的组件这里面都引入了。所以我们在引入了Spring-cloud-dependencies以后,我们在开发过程中就不需要指定组件的版本了,以后要用到那个版本,直接把组件引入过来,不用管版本。
微服务拆分
熟悉代码
ThreadLocal重点,在苍穹外卖中也讲过。


拆分原则


微服务项目结构
拆分的工程结构有两种:

独立的project是指,地下每一个微服务(模块)就是一个project,而黑马商城hmall是一个空文件夹,文件夹里面就有这些所有的project。
Maven聚合是,如上图,黑马商城就是一个project,底下的每个微服务就都是一个模块。如下图,每新建一个模块其实就是新建一个微服务,这种模式看起来和单体架构差不多,但是其实有区别的,如下图单体架构hm-common他是不运行的,只有hm-service是运行的。(这种模式更加方便我们去管理,这种结构比较受中小型项目的一些欢迎,所以之后我会来讲这种模式)

注意拆分的时候,配置里面的数据库的连接,数据库的连接很重要,每个微服务都要做到独立,独立部署,数据独立等,也就是说我们需要重新去创建一个新的Mysql的实例,利用Docker重新创建一个,这个微服务独享一台mysql,那么IP地址端口肯定都会变化,但是这样成本太高。所以我的建议是我们就搞一台Mysql,然后在里面创建不同的Database(数据库),一个微服务一个数据库,模拟一下,但是真实的企业中肯定是一个微服务一个独立的mysql实例。(如下图,配置修改了数据库的名称)

远程调用
问题引入:
当我们把hmall项目的购物车以及商品两个微服务拆分时,购物车有的业务需要商品的查询功能,就需要调用商品的Service层的代码,但是现在他们两个是两个微服务,并且数据库也是不一样的,从物理上隔离开了,没办法去调用商品的Service层代码,所以我们在查询购物车的时候拿不到商品的信息。
解决:物理上两者是隔绝的,但是从网络上两者又是相通的,因为这两者之后部署到服务器上也好,部署到容器当中也好,都是可以通过网络连接的。所以可以通过网络请求数据。购物车微服务通过网络向商品微服务发起请求:

购物车服务怎么向商品服务发网络请求呢?Java在这方面就模拟了前端向后端发送http请求,因为前端是个静态页面,需要后端传递数据才可以实现各种业务,如上的问题也可以模拟前端向后端发送的请求来完成。(针对于返回值类型,其实本来应该是JSON格式的数据,但是Java会反序列化成实体class类型给你)

举例:
</

最低0.47元/天 解锁文章
1258

被折叠的 条评论
为什么被折叠?



