其他分享
首页 > 其他分享> > 微服务快速入门——服务拆分与服务调用

微服务快速入门——服务拆分与服务调用

作者:互联网

一、何为微服务?

一种用于构建应用的架构方案,将应用进行拆分成多个核心功能,每个功能即服务,可以单独构建和部署,服务间不相互影响。

单一职责:每个服务对应唯一业务
自治:团队独立部署和交付
面向服务:提供统一标准接口
隔离性强:做好隔离避免出现级联问题                                  

微服务架构如下
在这里插入图片描述
微服务实则就是在解决下面几个问题

  1. 客户端如何访问服务?
  2. 服务之间如何通信?
  3. 如何治理服务?
  4. 服务挂了如何解决?
常见的解决方案有SpringCloud Netflix、Dubbo+Zookeeper、SpringCloud Alibaba(很火)

在这里插入图片描述

二、微服务与其他架构的区别

1.单体架构

简单但可扩展性差,高度耦合,适合小型项目

2.分布式架构

复杂但可扩展性好,松耦合,适合大型互联网项目

3.微服务

一种良好的分布式架构方案
拆分粒度更小、服务更独立、耦合度更低,但是更复杂、运维监控部署难度更高

4.SpringCloud

微服务架构的一站式解决方案。
集成了很多优秀的微服务组件

三、服务拆分

1.服务拆分原则

下面以商城为例,对其进行拆分可以得到如下四个大模块(商品、用户、订单、支付)

在这里插入图片描述

2.服务拆分示例

cloud-demo:父工程,管理依赖

- order-service:订单微服务,负责订单相关业务
- user-service: 用户微服务,负责用户相关业务

在这里插入图片描述

3.服务查询数据如下
订单服务
在这里插入图片描述

用户服务
在这里插入图片描述

四、服务调用

订单服务调用用户服务,把订单里的用户信息查询出来,思路如下
在这里插入图片描述

1.注册RestTemplate实例到Spring容器
2.在订单服务中调用用户服务接口

1.注册RestTemplate
在order-service服务中的OrderApplication启动类中,注册RestTemplate实例
在这里插入图片描述
2.远程服务调用
修改order-service服务中OrderService类中的queryOrderById方法:

public Order queryOrderById(Long orderId) {
   // 1.查询订单
   Order order = orderMapper.findById(orderId);
   // 2.远程调用路径
   String url = "http://localhost:8081/user/" + order.getUserId();
   // 3.远程调用返回数据
   User user = restTemplate.getForObject(url, User.class);
   //存入order
   order.setUser(user);
   // 4.返回
   return order;
}

3.服务调用成功
在这里插入图片描述
4.服务调用总结

基于RestTemplate发起的http请求实现远程调用
http请求做远程调用与语言无关,只需ip、端口、接口路径、请求参数即可

五、服务提供者和消费者

1.在服务调用关系中,会有两个不同的角色
在这里插入图片描述

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口)
服务消费者:一次业务中,调用其它微服务的服务。(调用接口)

2.但是,服务提供者和服务消费者是相对业务而言的,例如:服务A调用服务B,服务B调用服务C

对于A调用B而言:A是服务消费者,B是服务提供者
对于B调用C而言:B是服务消费者,C是服务提供者

标签:调用,服务,入门,订单,拆分,服务提供者,order,用户服务
来源: https://blog.csdn.net/qq_33591873/article/details/121879090