• 微服务:服务拆分和远程调用


    1.认识微服务:

    1.0. 单体架构和分布式架构的区别:

            了解单体架构和微服务架构的优缺点

    1.1. 单体架构:

    单体架构:将业务的所有功能集中在一个项目中开发,部署的时候也是打成一个包来进行部署。

            

    优点:1.架构简单

               2.部署成本低

    缺点:耦合度高(难以维护,升级困难)

    1.2. 分布式架构:

    分布式架构:将整个业务进行拆分,每个业务功能模块作为独立的项目开发,称为一个服务,每个服务都有自己的数据库....

    优点:1.耦合度降低

               2.易于升级和拓展

    缺点:1.服务调用关系错综复杂

    1.3. 微服务

    微服务的几个特征:

    1.单一职责:微服务拆分粒度小,每个服务负责自己独立的业务,做到单一职责

    2.面向服务:服务提供统一标准的接口,与语言和技术无关

    3.自治:团队独立,技术独立,数据独立,部署独立和支付独立

    4.隔离性强:服务调用做好隔离,容错,降级,避免出现级联问题

    2.服务拆分和远程调用

    2.1. 服务拆分原则

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

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

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

    2.2. 实现远程调用案例

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

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

                    

    其中的user为null

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

    查询的结果如图:

                    

    2.2.1. 案例需求:

    修改order-service中的根据id查询订单业务,要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。

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

    大概的步骤是这样的:

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

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

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

    2.2.2. 注册RestTemplate

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

    1. package cn.itcast.order;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. import org.springframework.context.annotation.Bean;
    6. import org.springframework.web.client.RestTemplate;
    7. @MapperScan("cn.itcast.order.mapper")
    8. @SpringBootApplication
    9. public class OrderApplication {
    10.     public static void main(String[] args) {
    11.         SpringApplication.run(OrderApplication.class, args);
    12.     }
    13.     @Bean
    14.     public RestTemplate restTemplate() {
    15.         return new RestTemplate();
    16.     }
    17. }

    2.2.3. 实现远程调用

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

     

    2.2.4. 最终运行结果:

                    

  • 相关阅读:
    数据分析(1)——如何用postgres快速找出数据库中所有表格包含空值的列
    【算法与数据结构】235、LeetCode二叉搜索树的最近公共祖先
    动手造轮子自己实现人工智能神经网络(ANN),解决鸢尾花分类问题Golang1.18实现
    数据结构+java基础+进制之间的转换
    事务和事务的隔离级别及脏读、幻读
    优秀程序员是怎么思考的?
    开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润
    竞赛选题 机器视觉目标检测 - opencv 深度学习
    UDS知识整理(四):ECU复位——0x11服务
    深度学习——LSTM
  • 原文地址:https://blog.csdn.net/viperd/article/details/136381484