首页 > 其他分享 >SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

SpringCloud篇(服务拆分 / 远程调用 - 入门案例)

时间:2024-11-12 22:47:03浏览次数:3  
标签:入门 service SpringCloud boot user 拆分 org order cloud

目录

一、服务拆分原则

二、服务拆分示例

1. 案例需求

2. 案例要求

3. 导入SQL语句

4. 实现思路

4.1. 创建父工程 cloud-demo 管理依赖

依赖导入思路

4.2. 创建子工程 order-servic

4.3. 创建子工程 user-servic

4.4. 创建 cloud_order 数据库和表并插入数据

4.5. 创建 cloud_user 数据库和表并插入数据

4.6. 子工程 order-service 的构建目录

4.7. 子工程 user-service 的构建目录

4.8. 调出并将启动类显示在Services中

4.9. 配置下项目使用的JDK

三、服务远程调用案例

1. 订单服务

2. 用户服务

3. 案例需求

4. 注册RestTemplate

5. 实现远程调用

6. 重启服务测试


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

一、服务拆分原则

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

二、服务拆分示例

1. 案例需求

以资料中的微服务 cloud-demo 为例,其结构如下:

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

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

2. 案例要求

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

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

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

3. 导入SQL语句

资料中的 cloud-order、cloud-user

4. 实现思路

4.1. 创建父工程 cloud-demo 管理依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cloud</groupId>
    <artifactId>d1_cloud-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>pom</packaging>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
        <mysql.version>5.1.47</mysql.version>
        <mybatis.version>2.1.1</mybatis.version>
    </properties>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencyManagement>
        <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>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>
依赖导入思路

1. 创建父工程模块打包方式为 pom 的原因:

用在父级工程或聚合工程中,用来做 jar 包的版本控制,必须指明这个聚合工程的打包方式为 pom

父类打成 pom 包的意义在于:父工程不写代码,代码都在子工程里写,只在父类工程里写 pom.xml 里写 jar 的

版本,控制子工程所需依赖的版本

2. 自定义属性在 properties 节点下进行声明依赖版本号,管理版本号。

3. SpringCloud 底层是依赖于 SpringBoot 的,并且有版本的兼容关系,由于本人使用的是 Hoxton.SR10

从而本人选择的是稳定 SpringBoot 发布版本 2.3.9.RELEASE

4.2. 创建子工程 order-servic

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <artifactId>d1_cloud-demo</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order-service</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.3. 创建子工程 user-servic

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>d1_cloud-demo</artifactId>
        <groupId>com.cloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-service</artifactId>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4.4. 创建 cloud_order 数据库和表并插入数据

4.5. 创建 cloud_user 数据库和表并插入数据

4.6. 子工程 order-service 的构建目录

4.7. 子工程 user-service 的构建目录

4.8. 调出并将启动类显示在Services中

4.9. 配置下项目使用的JDK

三、服务远程调用案例

1. 订单服务

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

根据id查询订单,返回值是Order对象,其中的user为null

访问地址:http://localhost:8080/order/101

结果:

2. 用户服务

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

访问地址:http://localhost:8081/user/1

结果:

3. 案例需求

修改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对象,一起返回

4. 注册RestTemplate

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

package com.cloud.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("com.cloud.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

5. 实现远程调用

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

6. 重启服务测试

重启服务测试,发现user不再为null,达到远程调用效果!

标签:入门,service,SpringCloud,boot,user,拆分,org,order,cloud
From: https://blog.csdn.net/qq_51226710/article/details/143726013

相关文章

  • SpringCloud篇(服务拆分/远程调用 - 远程调用 - Fegin)
    目录一、为什么要使用Feign远程调用二、什么是Feign三、Feign替代RestTemplate1.引入依赖2.添加注解3.编写Feign的客户端4.测试5.总结四、自定义配置1.配置文件方式2.Java代码方式五、Feign性能优化1.简介2.引入依赖3.配置连接池4.结论六、最佳实......
  • 基于java+springcloud的微服务小型气象站后端管理系统
    前言基于Java+SpringCloud的微服务小型气象站后端管理系统为气象数据的采集、分析与应用提供了有力支持。系统可连接多个小型气象站设备,接收包括温度、湿度、气压、风速、风向、降水量等气象数据。这些数据在传入系统后会经过严格的校验和清洗,确保数据的准确性和完......
  • 基于java+springcloud的微服务的手机商城管理系统
    前言基于Java+SpringCloud的微服务手机商城管理系统具有高度的灵活性和可扩展性。系统在商品管理方面表现卓越,详细记录每一款手机的信息,包括品牌、型号、配置、颜色、价格、库存等。商家可以轻松添加新手机款式、修改商品信息或调整价格,还能实时监控库存水平,当库存......
  • 电路板维修入门之二极管篇
    晶体二极管在电路中常用“D”加数字表示,如:D5表示编号为5的二极管。二极管的作用二极管的主要特性是单向导电性,也就是在正向电压的作用下,导通电阻很小;而在反向电压作用下导通电阻极大或无穷大。正因为二极管具有上述特性,无绳电话机中常把它用在整流、隔离、稳压、极性保护、......
  • Jquery入门系列2---层次选择器
    上节课讲了基础选择器,我们来回顾一下,基础选择器包括类选择器,id选择器,元素选择器,以及这几种混和在一块的用法。今天我们来讲层次选择器。何为层次选择器呢?如果我们想通过DOM元素之间的层次关系来获取特定元素,比如后代元素,子元素,相邻元素,兄弟元素等,就需要层次选择器,下面我把层......
  • Postman接口测试从入门到精通
     一、接口测试的简介和分类接测试就是测试系统组件接口之间的一种测试。分类︰测试外部接∶测试被测系统和外部系统之间的接口。(只需要测试正例即可,看是否调用成功即可)测试内部接口:1.内部接口只提供给内部系统使用。((预算系统,承保系统)(只需要测试正例即可)2.内部接口提供给外......
  • Python的Web请求:requests库入门与应用
    Python的Web请求:requests库入门与应用在Python中,进行网络请求和获取数据是许多应用程序的基础功能。requests库是Python中最流行的HTTP库之一,它以简洁、易用、功能强大的特点著称,可以帮助开发者高效地进行各种类型的Web请求。本文将带你快速上手requests库,并展示如何在实际......
  • 第一章springboot开发入门
    学习目标:对于掌握和熟悉的东西需要背下来1.1SpringBoot概述1.1.1SpringBoot简介springboot的历史(也可以另外看文字,了解历史有助于你提高对框架的学习和理解):spring框架虽然已经是轻量级的啦,但是配置文件是重量级的,随着生产中敏捷开发的需要,在spring中使用注解开发逐......
  • 运维工程师的出路到底在哪里?零基础入门到精通,收藏这篇就够了
    目录前言一、运维工程师的职责二、能力要求(一)技术方面(二)管理方面(三)业务方面三、35岁被称为运维半衰期,究竟为何?四、该如何顺利过渡半衰期五、运维的职业发展路径总结前言你是不是也常常听到身边的运维人员抱怨,他们的出路到底在哪里呢?别着急,让我告诉你,运维人员......
  • 自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)
    自动驾驶仿真:软件在环(SIL)测试详解一、引言自动驾驶技术的快速发展对测试验证提出了更高要求。软件在环(Software-in-the-Loop,简称SIL)仿真测试作为自动驾驶系统验证的重要手段,通过将自动驾驶的控制软件与虚拟仿真平台结合,实现对自动驾驶系统的软件功能、稳定性和安全性的全面测......