【2.1】服务拆分--案例Demo
创始人
2024-05-03 02:54:22
0

服务拆分--案例Demo

  • 服务拆分注意事项:
  • 导入服务拆分Demo
    • 测试结果:
  • 总结

知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。


服务拆分注意事项:

比如现在有一个需求,是查询订单,同时把订单里关联的用户信息,商品信息都查询过来。
在这里插入图片描述
如果是以前的开发模式,是写一个方法去查订单,在订单查询过程中得到了用户Id,再去数据库里把用户查出来,得到商品Id,再去数据库里把商品查出来。
那么这些功能全部写到了订单模块里,这样是完全违背了微服务原则。

微服务拆分的目的就是单一职责。一个微服务只做自己相关的事,如果订单模块要查询用户,商品,也就是所有模块用到什么查询什么,那么拆分就没有意义了。同时,订单模块需要查询用户,用户模块也需要查询用户,这相当于一种重复开发。
所以,微服务拆分应该切记:

  1. 不同微服务,不要重复开发相同业务。
  2. 微服务数据独立,不要访问其它微服务的数据库。
    在这里插入图片描述
  3. 微服务将自己的业务暴露为接口,供其它微服务调用。

导入服务拆分Demo

使用的资料可以添加黑马程序员获取源码。

  • 使用工程:cloud-demo

  • 项目结构:
    在这里插入图片描述
    cloud-demo: 负责管理整个项目的依赖。
    order-service: 做订单相关功能。
    user-service: 做用户相关功能

  • 将课前资料准备的sql导入数据库中:
    在这里插入图片描述
    – 订单业务查询的表是order表;
    – 用户业务查询的表是user表;
    实际应用时是部署到不同的数据库里,现在是做测试。

导入两个表:
在这里插入图片描述
导入项目:
在这里插入图片描述
之后我在画圈这个地方爆红,检查了一下maven仓库里含有相应的pom文件,发现都包含。
在这里插入图片描述
这个时候点击maven中的重新加载即可;
在这里插入图片描述
之后会弹出一个弹窗询问你是否需要使用service。(不同的idea版本可能提示不同)
点击yes。即可看到这样的内容:
在这里插入图片描述
启动两个服务:
在这里插入图片描述

简要介绍:
在这里插入图片描述
首先cloud-demo是父工程,在父工程里面主要是定义了依赖版本。比如图中springboot版本2.3.9

在这里插入图片描述
定义了:
java版本1.8
spring-cloud版本Hoxton.SR10
mysql版本以及mybatis版本
在这里插入图片描述
user-service的yml文件中可以看到关联的是cloud_user这个数据库,模拟数据分离。

user-service的业务是用户查询,点开UserController
在这里插入图片描述
通过/user/{id}这样一个路径去请求便可实现通过id查询用户。返回的是User对象:
User

业务流程就是service调mapper,mapper写sql。

同样,在order-service中:
在这里插入图片描述
可以看到对应的数据库是cloud_order。
接下来打开对应的接口:
在这里插入图片描述
这里是根据{orderId}查询订单,返回一个order对象。
Order对象
可以看到里面有订单id,price,name,num,userId,user,这就产生了关联。


测试结果:

打开浏览器输入localhost:8080/user/1
在这里插入图片描述
可以看到查到了用户id为1的用户信息。这里的信息对应数据库里的信息。大家注意在yml文件中的数据库密码要改成本地数据库的密码,以及对应版本。

输入localhost:8080/order/101
在这里插入图片描述


总结

  1. 微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务。
  2. 微服务可以将业务暴露为接口,供其它微服务使用。
  3. 不同微服务应该有自己独立的数据库。

By–Suki 2022/12/30

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...