【微服务 SpringCloud】实用篇 · 服务拆分和远程调用

这篇具有很好参考价值的文章主要介绍了【微服务 SpringCloud】实用篇 · 服务拆分和远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务(2)

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

微服务(2)

本文将正式进入微服务框架SpringCloud和SpringCloudAlibaba的学习了,他们的工作就是微服务治理

任何分布式架构都离不开服务的拆分,微服务也是一样

1. 服务拆分原则

服务拆分就是单个模块拆成多个模块,不过模块必须具有一定的独立性,这里我总结了微服务拆分时的几个原则:

  • 不同微服务, 不要重复开发相同业务
  • 微服务数据独立, 不要访问其它微服务的数据库
  • 微服务可以 将自己的业务暴露为接口,供其它微服务调用

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

2. 服务拆分示例

以本链接的项目示例:资源/cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)

这么一个简单的微服务cloud-demo为例,其结构如下:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

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

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

这样模拟出微服务的效果,满足以下要求:

  • 订单微服务和用户微服务都必须有各自的数据库,相互独立
  • 订单服务和用户服务都对外暴露Restful的接口
  • 订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

网络资料:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

1.2.1 导入demo工程

项目结构如下:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

多个应用/多个微服务运行的界面设置(这样可以更好的观察和操作)

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

添加运行的类型:

  • 添加application、maven、springboot即可(这里没有springboot也没关系)

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

等待pom.xml加载完毕,项目可以尝试启动:

  • 打开控制台的services选项

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

选中父目录,ctrl shift f10运行(这是默认的,如果你改了就是你改的运行快捷键,或者点绿色小三角),就是运行全部服务,如果选中对应的微服务运行就是运行对应的微服务~

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

同理,快捷键ctrl f2停止运行

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

1.2.2 导入Sql语句

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

cloud-user表中初始数据如下:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

cloud-order表中初始数据如下:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

cloud-order表中持有cloud-user表中的id字段。

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

  • 数据独立 -> 各自有独立的数据库!

(注意改yml文件的数据库连接配置哦!)

3. 实现远程调用案例

(重启两个微服务)

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

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

根据id查询订单,返回值是Order对象,如图:

  • 其中的user为null

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

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

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

查询的结果如图:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

端口与订单服务不一样哦,解耦合~

1.3.1 案例需求:

order-service中的根据id查询订单业务:

  • 要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

我们通过查询到的订单信息的用户id,想要查询用户信息(在这里不会重复开发用户模块的功能,并且订单模块不能直接查询用户模块的数据库),就要访问用户服务暴露的接口

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

大概的步骤是这样的:

  • 注册一个RestTemplate的实例到Spring容器(存储Bean对象)
  • 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
  • 将查询的User填充到Order对象,一起返回

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

而这是我们未曾尝试过的,但是我们会有这个想法(就像浏览器js的ajax发送http请求一样),事实上在SpringCloud框架中就是支持这种 “后端给后端发http请求” 的!

  • 这就是一个服务到另一个服务的远程调用(我们这里两个微服务挨在一起,实际上的微服务之间可能相隔千里哦)
1.3.2 注册RestTemplate

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

  • RestTemplate这个类就是SpringCloud提供给我们发送http请求滴

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

1.3.3 实现远程调用

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

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

1.3.4 查看效果

重启微服务,浏览器访问订单服务:

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

4. 提供者与消费者

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

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

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

【微服务 SpringCloud】实用篇 · 服务拆分和远程调用,微服务,微服务,spring cloud,架构

但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。

如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

那么这个身份是 相对而言 的~

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

因此,在不同的业务下,服务B既可以是服务提供者,也可以是服务消费者


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码:cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-715992.html


到了这里,关于【微服务 SpringCloud】实用篇 · 服务拆分和远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud Day2 Nacos配置管理、Feign远程调用与Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月10日
    浏览(61)
  • 微服务服务拆分和远程调用

    单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝 微服务:一种良好的分布式架构方案 ①优点:拆分粒度更小、服务更独立、耦合度更低 ②缺点

    2024年02月13日
    浏览(35)
  • 微服务-服务拆分和远程调用

    任何分布式架构都离不开服务的拆分,微服务也是一样。 微服务拆分时的几个原则: 不同微服务,不要重复开发相同业务 微服务数据独立,不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口,供其它微服务调用 以微服务cloud-demo为例,其结构如下: cloud-de

    2024年01月20日
    浏览(32)
  • 【spring Cloud】微服务通信的三种方式RestTemplate、Feign远程调用与Dubbo的使用

    目录 一、通过RestTemplate调用微服务 二、通过Feign远程调用 三、Dubbo  分布式中的远程调用大概分为两种 RESTful接口  REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构。 每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种

    2024年04月11日
    浏览(45)
  • 服务拆分及远程调用

    分布式架构都离不开服务的拆分,微服务也是一样。 不同微服务,不要重复开发相同业务 微服务数据独立,不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口,供其它微服务调用         以前时,我们将服务启动之后,可以使用浏览发送http请求来访问服务

    2024年01月17日
    浏览(40)
  • 微服务 Spring Cloud 1,服务如何拆分?使用微服务的注意事项?

    大家好,我是哪吒。 微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。 微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。 我是做互联网项目的,刚开始的时候,用的

    2024年01月19日
    浏览(41)
  • 【Spring Cloud】如何使用Feign实现远程调用

    本次示例代码的文件结构如下图所示。 在 order-service 的 pom.xml 文件中导入 Feign 的依赖坐标。 在 order-service 的启动类上添加注解 @EnableFeignClients ,以开启 Feign 功能。 Feign 采用了 Spring MVC 的注解的方式发起远程调用。只需要把发 HTTP 请求的信息声明在一个接口中,并添加注解

    2024年02月13日
    浏览(45)
  • 微服务SpringCloud教程——Spring Cloud是什么

    Spring Cloud 是一款基于 Spring Boot 实现的微服务框架。Spring Cloud 源自 Spring 社区,主要由 Pivotal 和 Netflix 两大公司提供技术迭代和维护。 随着微服务的火爆流行,国内外各大互联网公司都相继分享了他们在微服务架构中,针对不同场景出现的各种问题的解决方案和开源框架。

    2024年02月15日
    浏览(46)
  • 【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战

    在分布式领域中,一个系统由很多服务组成,不同的服务由各自的进程单独负责。因此,远程调用在分布式通信中尤为重要。 远程调用可分如下两类: 本地过程调用(Local Procedure Call,LPC) ,是指同一台机器上运行的不同进程之间的互相通信,即在多进程操作系统中,运行

    2023年04月09日
    浏览(44)
  • 【微服务】SpringCloud之Feign远程调用

    🏡浩泽学编程 :个人主页  🔥 推荐专栏 :《深入浅出SpringBoot》《java对AI的调用开发》               《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 使用Feign远程调用代替RestTemplate远程调用。 使用RestTemplate发起远程调用: 虽然在引

    2024年04月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包