SpringCloud 服务的拆分及远程调用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: SpringCloud 服务的拆分及远程调用

前言

  任何分布式架构都离不开服务的拆分,微服务也是一样,所以我们要先在遵守微服务拆分的原则下拆分服务,然后实现远程调用。本教程是基于RestTemplate的远程调用。

1、服务拆分

  拆分后服务的复杂性降低,所需要的维护资源显著减少,或者对人员能力的要求大大降低,拆分不仅仅是架构上的调整,也意味着要在组织结构上做出相应的适应性调整,确保拆分后的服务由相对独立的团队负责维护,尽量不要出现在不同服务之间的交叉调用。  任何分布式架构都离不开服务的拆分,微服务也是一样。

1、微服务拆分的原则:

  • 单一职责原、高内聚低耦合
  • 微服务数据独立,不要访问其它微服务的数据库
  • 微服务可以将自己的业务暴露为接口,供其它微服务调用

image-20220823114719139.png

2、服务拆分示例:

1、新建一个工程

父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务
  • 订单微服务用户微服务 都必须有各自的数据库
  • 订单服务 如果需要查询 用户信息,只能调用用户服务的Restful接口
2、创建数据库
  • cloud-user

image-20220823124853325.png

cloud-user数据库里有tb_user一张表

image-20220823125043932.png

  • cloud-order

image-20220823124740103.png

cloud-order数据库里有tb_order一张表

image-20220823130312038.png

3、项目模块目录

image-20220823132111588.png

首先我们在创建工程时已经导入SpringCloud的坐标以及mysql、mybatis等等。

<dependencies><!--springCloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency></dependencies>
4、核心功能描述

在 order-service 服务中,有一个根据id查询订单的接口:

@RestController@RequestMapping("order")
publicclassOrderController {
@AutowiredprivateOrderServiceorderService;
@GetMapping("{orderId}")
publicOrderqueryOrderByUserId(@PathVariable("orderId") LongorderId) {
// 根据id查询订单并返回returnorderService.queryOrderById(orderId);
    }
}

启动服务,根据id查询订单,返回值是Order对象,其中的user为null如图:

image-20220823133859224.png

在user-service中有一个根据id查询用户的接口:

@Slf4j@RestController@RequestMapping("/user")
publicclassUserController {
@AutowiredprivateUserServiceuserService;
/*** 路径: /user/110** @param id 用户id* @return 用户*/@GetMapping("/{id}")
publicUserqueryById(@PathVariable("id") Longid) {
returnuserService.queryById(id);
    }
}

查询的结果如图:

image-20220823134014560.png

3、小结

以上就是微服务的拆分,符合了微服务拆分的原则。

2、远程调用

  order-service中的根据id查询订单业务,在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回,此时就需要远程调用user-service服务。

1、注册RestTemplate

  我们在启动类上或者配置类中注册RestTemplate实例:

@BeanpublicRestTemplaterestTemplate() {
returnnewRestTemplate();
}

2、现远程调用

修改order-service服务中OrderService类中的queryOrderById方法:

@ServicepublicclassOrderService {
@AutowiredprivateOrderMapperorderMapper;
@AutowiredprivateRestTemplaterestTemplate;
publicOrderqueryOrderById(LongorderId) {
// 1.查询订单Orderorder=orderMapper.findById(orderId);
//urlStringurl="http://localhost:8081/user/"+order.getUserId();
//发起调用Useruser=restTemplate.getForObject(url,User.class);
//3.存入orderorder.setUser(user);
// 4.返回returnorder;
    }
}

3、提供者与消费者

  在服务调用关系中,会有两个不同的角色:

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

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


4、测试

  经过 ,注册RestTemplate和修改order-service服务中OrderService类中的queryOrderById方法现远程调用之后,重新启动两个服务,访问order-service,成功在order-service服务实现了远程调用user-service

image-20220823140414081.png


总结

  RestTemplate是由Spring框架提供的一个可用于应用中调用rest服务的类它简化了与http服务的通信方式,统一了RESTFul的标准,封装了http连接,我们只需要传入url及其返回值类型即可,较为简单,不过也存在弊端。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
3928 7
|
9月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
368 2
|
4月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
11月前
|
负载均衡 网络协议 小程序
SpringCloud远程调用为啥要采用HTTP,而不是RPC?
【8月更文挑战第28天】在微服务架构日益盛行的今天,SpringCloud凭借其强大的生态系统和灵活的集成能力,成为了众多企业构建微服务系统的首选框架。在微服务之间的远程调用中,一个常见的问题是选择HTTP还是RPC(远程过程调用)作为通信协议。本文将深入探讨SpringCloud为何更倾向于采用HTTP而非RPC进行远程调用。
627 5
|
5月前
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
533 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
5月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
224 7
|
6月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
590 4
|
11月前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
168 0
|
7月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
421 5

热门文章

最新文章