微服务导学
创始人
2024-05-29 05:26:13
0

一、微服务导学

1.1 对比单体架构与分布式架构

单体架构

将业务的所有功能集中再一个项目中开发,打成一个包部署。

分布式架构

缺点: 模块多导致部署麻烦;架构复杂,难度大

1.2 微服务

经过良好架构设计的分布式架构方案,微服务架构特征:

缺点:架构更复杂,运维、监控、部署难度提高

为了实现高内聚,低耦合,降低程序之间的影响

1.2.1 微服务结构

注册中心:维护微服务里面每个节点的信息,并且监控节点的状态

配置中心:统一管理整个微服务群的配置。利用通知的方式让对应的服务去监控配置的变化,从而实现配置的更新

服务网关:作为入口。用户访问网关,然后由网关把请求路由到我们的微服务群(路由的时候还可以做负载均衡,路由的时候以及服务调用的过程中我们要做好服务的容错处理)

1.2.2

若使用Hoxton.SR10,则对应spring boot版本2.3.x版本

二、服务的拆分及远程调用

2.1 服务拆分注意事项

  • 不同微服务,不要重复开发相同业务

  • 微服务数据独立,不要访问其他微服务的数据库(每个微服务都有自己独立的数据库,从根源上杜绝了耦合性的一些业务)

  • 将自己的业务暴露为接口,供其他微服务调用

2.2服务拆分

我们可以准备两个不同的database去存储这些表,如下图所示

之后启动两个服务,下面的两个服务就符合拆分原则,order服务查寻订单,user服务查询用户,除此之外数据库也做了分离,每个服务都对应一个数据库而不是对应一张表

总结

  • 微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务

  • 微服务可以将业务暴露为接口,供其他微服务使用

  • 不同微服务都应该有自己独立的数据库

2.3 微服务远程调用

2.3.1 根据订单id查询订单功能

案例:根据订单id查询订单的同时,把订单所属的用户信息一起返回

如下图所示,当我们查询订单信息的时候,发现最后一个参数"user"为null,下面我们就要实现"user"参数复制

下图所示的需求更清晰

那订单模块不能直接昂问用户模块的数据库,订单模块怎么获取用户信息呢? 答案是远程调用!

2.3.1.1怎么远程调用?

分析如下图所示:

订单模块可以通过http的形式向用户模块发送http请求从而获取到对应的用户数据

在订单数据表中我们发现有"user_id"字段,我们完全可以使用"user_id"字段的数据作为http请求的参数来获取用户数据

2.3.1.2 那订单模块怎么发送http请求?

第一步:注册RestTemplate

在order-service的OrderApplication中注册RestTemplate

通过@Bean的方式将RestTemplate注册为spring对象,将来我们在任何地方都能够注入这个对象

bean的注入一般放在配置类中,一般带有@SpringBootApplication的启动类也是配置类,那我们也可以在启动类中注入bean,注入之后我们便可以使用RestTemplate发送http请求

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Beanpublic RestTemplate restTemplate(){return  new RestTemplate();}}
第二步:发送HTTP请求并封装数据

下面这个实体类就是我们要封装之后的

@Data
public class Order {private Long id;private Long price;private String name;private Integer num;private Long userId;private User user;
}
 @Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单    从数据库中获取订单,订单数据中有user_id字段的值,我们要用这个字段的值找userOrder order = orderMapper.findById(orderId);//2. 利用RestTemplate发起HTTP请求,获取用户//         get请求:getForObject(url路径,返回值类型)//                 我们下面的返回值类型不需要JSON,而是需要一个User对象的形式,所以写User.class//         post请求:postForObject()String url = "http://localhost:8081/user/" + order.getUserId();User user = restTemplate.getForObject(url, User.class);//3. 封装user到Order中order.setUser(user);// 4.返回return order;}

最终访问时带有user用户信息,说明我们封装成功!!!

2.3.2 远程调用总结

  • 基于RestTemplate发起的http请求实现远程调用

  • http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可

相关内容

热门资讯

我当小警察高二作文(优质3篇... 我当小警察高二作文 篇一我当小警察近日,我有幸参加了学校组织的“我当小警察”活动。这是一次非常有意义...
那一刻,我们的距离是0高一作... 那一刻,我们的距离是0高一作文 篇一那一刻,我们的距离是0我记得那是一个阳光明媚的下午,我和同学们聚...
夜凉如水花满枝桠高二作文【精... 夜凉如水花满枝桠高二作文 篇一夜凉如水花满枝桠夏夜的微风拂过,带着一丝丝清凉,仿佛水滴在心头涟漪开来...
笨女孩也是天使高二作文【优秀... 笨女孩也是天使高二作文 篇一我曾经是一个笨女孩,总是在学习上犯错误,常常被同学笑话。但我相信,即使是...
绵山游记高一作文【实用3篇】 绵山游记高一作文 篇一绵山游记绵山,位于四川省南充市嘉陵区,是一座著名的山岳旅游胜地。我有幸在暑假期...
优秀的男孩们高二作文【精彩3... 优秀的男孩们高二作文 篇一优秀的男孩们男孩们,你们是社会的未来,是家庭的希望,是校园的风景。作为高二...
高三责任与担当作文800字【... 高三责任与担当作文800字 篇一高三,是每个学生都期待的一年,也是每个学生都感到压力巨大的一年。在这...
记忆中的红薯粉高一作文【精简... 记忆中的红薯粉高一作文 篇一红薯粉是我童年时的美味回忆。每逢夏日,妈妈总是会准备一碗清爽可口的红薯粉...
新的计划本高二作文(优选5篇... 新的计划本高二作文 篇一:为什么制定计划是成功的关键在我们的生活中,计划是非常重要的。无论是在学习、...
那年匆匆高二作文【精选3篇】 那年匆匆高二作文 篇一初次踏入高二,我仿佛感受到时间的流逝之快。仿佛昨天还是迷茫的高一新生,而今天已...
记得高三作文 记得高三作文  在生活、工作和学习中,许多人都有过写作文的经历,对作文都不陌生吧,写作文可以锻炼我们...
我的命运我做主高三作文 我的命运我做主高三作文  在我们平凡的日常里,说到作文,大家肯定都不陌生吧,作文可分为小学作文、中学...
做一个聪明的人高三作文800... 篇一:做一个聪明的人高三作文800字第一篇内容:智慧的力量聪明是每个人都希望拥有的品质之一。在高三这...
高三家长寄语(精彩5篇) 高三家长寄语 篇一高三家长寄语:相信你的孩子,给予他们支持和鼓励亲爱的家长们:您好!我是一位拥有多年...
高三毕业证明范文【优选6篇】 高三毕业证明范文 篇一尊敬的校领导、老师们:我是xxx,现就读于贵校高三年级,即将毕业。在这里,我谨...
高三作文:甘当绿叶【优选3篇... 高三作文:甘当绿叶 篇一甘当绿叶,追寻自我的价值人生是一场长跑,每个人都有自己的起点和终点。有的人天...
高三活出自我作文 高三活出自我作文  繁星闪烁,点缀浩瀚无限的宇宙。众星争艳,释放灿烂之光,只为自己精彩,而在无边的浩...
生活的乐趣高三作文 生活的乐趣高三作文  在平平淡淡的学习、工作、生活中,大家都有写作文的经历,对作文很是熟悉吧,作文是...
梦回高三【实用3篇】 梦回高三 篇一回忆起高三,仿佛一场梦境般在脑海中浮现。那是我人生中最为辛苦却也最为难忘的一年。在这一...
寻求高考之外的人生之路创新作... 寻求高考之外的人生之路创新作文 篇一近年来,高考已经成为了社会上的一种普遍现象,几乎每一个家庭都会面...