当前位置: 首页 > news >正文

SpringCloud之服务拆分和实现远程调用案例

服务拆分

对单体架构项目来说:简单方便,高度耦合,扩展性差,适合小型项目。

而对于分布式架构来说:低耦合,扩展性好,但架构复杂,难度大。

微服务就是一种良好的分布式架构方案:

①优点:拆分粒度更小、服务更独立、耦合度更低

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

SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。

微服务拆分时的几个原则:

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

微服务数据独立,不要访问其它微服务的数据库

微服务可以将自己的业务暴露为接口,供其它微服务调用

拆分案列:

cloud-demo是父工程,是用来管理依赖的。

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

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

要求:

  • 订单微服务和用户微服务都必须有各自的数据库,相互独立

  • 订单服务和用户服务都对外暴露Restful的接口

  • 订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

实现远程调用

在order-service服务中,有一个根据id查询订单的接口,根据id查询订单,返回值是Order对象,如图,其中的user为null。

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

查询结果:

现在通过实现远程调用,在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。

因此,我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。

大概的步骤是这样的:

  • 注册一个RestTemplate的实例到Spring容器

  • 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User

  • 将查询的User填充到Order对象,一起返回

注册RestTemplate

在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:

查询结果:

假如我们的服务提供者user-service部署了多个实例,那么

order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?

有多个user-service实例地址,order-service调用时该如何选择?

order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

上述问题将在注册中心中可以得到解决,接下来还会继续介绍关于Eureka注册中心和Nacos注册中心。

http://www.lryc.cn/news/26748.html

相关文章:

  • mybatis: Invalid bound statement (not found): com.atguigu.dao.UserDao.save
  • JavaScript 代码规范
  • 6综合项目 旅游网 【6.我的收藏和收藏排行榜】
  • openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法
  • 借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险
  • 蓝桥杯-数位排序
  • 【ES实战】ES 插件包离线安装(本地文件)
  • Spring的核心基础——IOC与DI
  • C++正则表达式基础
  • 如何在网络安全中使用人工智能并避免受困于此
  • 生态 | 人大金仓与超聚变的多个产品完成兼容认证
  • 4自由度串联机械臂按颜色分拣物品功能的实现
  • 玩转结构体---【C语言】
  • c语言指针怎么理解 第二部分
  • GC简介和监控调优
  • Understanding The Linux Kernel --- Part2 Memory Addressing
  • 前后端分页查询好大的一个坑(已解决)
  • Python批量执行读取ini文件和写入ini文件时,性能比较低怎么办,给出解决方案和源码
  • 微机原理与接口技术 汇编语言程序设计DOS常用命令
  • 4.ffmpeg命令转码规则、过滤器介绍、手动流map选项
  • 【python】标准库详解
  • Golang Map原理(底层结构、查找/新增/删除、扩缩容)
  • Java_数组
  • list与vector的区别
  • 【C++、数据结构】位图、布隆过滤器、哈希切割(哈希思想的应用)
  • 计算机网络安全基础知识3:网站漏洞,安装phpstudy,安装靶场漏洞DVWA,搭建一个网站
  • 大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)
  • 2023年全国最新食品安全管理员精选真题及答案10
  • Unity常见面试题详解(持续更新...)
  • java高级篇之三大性质总结:原子性、可见性以及有序性