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

目录

一、服务拆分原则

二、服务拆分示例

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);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}

5. 实现远程调用

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

6. 重启服务测试

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13147.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

特征融合篇 | YOLO11改进 | 更换上采样方式之轻量级通用上采样算子CARAFE

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。CARAFE算子的主要特点是在保持轻量级功能的同时&#xff0c;能够提供比其他上采样算子更好的性能。它通过少量的参数和计算量来实现高效的图像上采样。CARAFE算子能够根据像素之间的关系进行自适应的上采样&#xff0c;从而…

Java集合Queue——针对实习面试

目录 Java集合QueueQueue接口的特点是什么&#xff1f;Queue和Deque的区别&#xff1f;ArrayDeque和LinkedList的区别&#xff1f;什么是PriorityQueue&#xff1f;什么是BlockingQueue&#xff1f; Java集合Queue Queue接口的特点是什么&#xff1f; Queue接口在Java中是一个…

【支付宝崩了】复盘

一、背景 2024年11月11日&#xff0c;#支付宝崩了#冲上微博热搜第一 部分网友反映支付宝 App无法正常使用&#xff0c;他们遇到了同一笔订单被扣款三次、余额宝转账至余额后余额显示为0、线下支付后商家未收到款项但银行卡已被扣款等问题。 此外&#xff0c;有网友称支付…

丹摩征文活动|FLUX.1+ComfyUI的详细部署以及实验总结

公主请阅 1. FLUX.1的简介2. 部署过程创建资源ComfyUI的部署操作部署FLUX.1 如何使用&#xff1f;实验总结&#xff1a;环境搭建与工具安装实验步骤实验结果分析总结 1. FLUX.1的简介 FLUX.1 是由黑森林实验室开发的图像生成工具&#xff0c;分为三个版本&#xff1a; FLUX-1-…

基于STM32的智能仓库管理系统设计

引言 本项目基于STM32微控制器设计了一个智能仓库管理系统&#xff0c;通过集成多个传感器模块和控制设备&#xff0c;实现对仓库环境和物资管理的自动化监控。该系统能够实时监测仓库内的温湿度、烟雾浓度等参数&#xff0c;并且通过红外传感器监控人员出入&#xff0c;结合R…

206面试题(47~60)

208道Java面试题 47~60 **208道Java面试题****47. 在 Java 程序中怎么保证多线程的运行安全&#xff1f;****48. 多线程中 synchronized 锁升级的原理是什么&#xff1f;****49. 什么是死锁&#xff1f;****50. 怎么防止死锁&#xff1f;****51. ThreadLocal 是什么&#xff1f…

MySQl基础----Linux下数据库的密码和数据库的存储引擎(内附 实操图和手绘图 简单易懂)

绪论​ 涓滴之水可磨损大石&#xff0c;不是由于他力量强大&#xff0c;而是由于昼夜不舍地滴坠。 只有勤奋不懈地努力&#xff0c;才能够获得那些技巧。 ——贝多芬。新开MySQL篇章&#xff0c;本章非常基础&#xff0c;但同时需要一定的Linux基础&#xff0c;所以假若你没学习…

番外篇 | 关于YOLO11算法的改进点总结

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在2024年9月27日盛大举行的YOLO Vision 2024活动上&#xff0c;Ultralytics公司震撼发布了YOLO系列的最新成员—YOLO11。作为Ultralytics YOLO系列实时目标检测器的最新迭代&#xff0c;YOLO11凭借尖端的准确性、速度和效率…

增长放缓,跨境电商如何以“体验”撬动高转化和高复购?

增长放缓&#xff0c; 跨境电商步入发展新周期 伴随着疫情红利的逐渐收缩&#xff0c;跨境电商市场从野蛮高速增长回归理性&#xff0c;步入新的发展周期&#xff0c;增幅放缓成为新常态。根据eMarketer的统计数据&#xff0c;全球跨境电商销售增长从2020年的26.7%下跌至2022年…

2024“龙信杯“电子数据取证竞赛——计算机取证题目Writeup

以下内容是2024年“龙信杯”电子数据取证竞赛计算机取证题目的答案与解题思路 前置 前置发现电脑中有EFS加密文件&#xff0c;故使用仿真软件保持原有密码进行仿真 1.分析计算机检材&#xff0c;嫌疑人在将其侵公数据出售前在Pycharm中进行了AES加密&#xff0c;用于加密的key…

Linux学习_12

第十一章 管理Linux软件包和进程 主要包括源码下载安装软件&#xff0c;PRM管理工具&#xff0c;YUM/DNF管理工具 源码下载安装软件 源码文件&#xff1a;是指包含计算机程序源代码的文本文件。源代码是用特定编程语言编写的人类可读指令&#xff0c;它描述了计算机程序的逻辑、…

2024年Python最新下载安装教程,附详细图文,持续更新

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是Python3 的下载安装教程&#xff0c;适用于所有 Python3 版本&#xff0c;感兴趣的可以看一下 文章目录 简介一、Python的下载1 网盘下载地址 (下载速度比较快&#xff0c;推荐&#xff09;2 官网下载地址 二、…

JAVA同城服务顺风车预约车拼车系统源码支持小程序+公众号+H5

JAVA同城服务顺风车预约车拼车系统源码&#xff0c;全面支持小程序、公众号及H5平台&#xff0c;精准定位于解决城市出行痛点&#xff0c;满足用户多样化、灵活化的出行需求。市场分析显示&#xff0c;该系统凭借便捷的预约拼车功能&#xff0c;有效缓解城市交通压力&#xff0…

126.WEB渗透测试-信息收集-ARL(17)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;125.WEB渗透测试-信息收集-ARL&#xff08;16&#xff09; POC信息里面有一些集成的poc …

什么是 ISP:了解互联网服务提供商的作用

一、ISP 基础知识 从本质上讲&#xff0c;ISP 提供两项主要服务&#xff1a;互联网接入和互联网传输。互联网接入是指使用户能够连接到互联网的物理和逻辑连接&#xff0c;通常通过调制解调器、路由器或其他网络设备。此连接可以是有线的&#xff08;例如通过 DSL、光纤或电缆…

Trace——下一代自动微分工具,优化AI系统设计

人工智能咨询培训老师叶梓 转载标明出处 在自动化设计和更新AI系统&#xff0c;如编码助手、机器人和副驾驶等领域&#xff0c;优化问题的研究显得尤为重要。传统的自动微分框架&#xff0c;例如PyTorch&#xff0c;虽然能够高效地优化可微分系统&#xff0c;但在面对一般计算…

天猫商品详情数据API接口简介

随着电子商务的飞速发展&#xff0c;各大电商平台都在积极开发和完善自己的数据接口&#xff0c;以便为商家和消费者提供更加便捷、高效的服务。天猫作为阿里巴巴旗下的重要电商平台&#xff0c;其商品详情数据接口是商家获取商品信息、进行数据分析的重要工具。联讯数据将详细…

unity 玩家和炸弹切线计算方式

脚本挂在炸弹上&#xff01; using System.Collections; using System.Collections.Generic; using UnityEngine;public class TargetDetaction : MonoBehaviour {private Transform PlayerTF;private Transform bomb;private float radius;private string Player "Play…

【Linux】————信号

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2024年11月12日 信号和信号量 首先说明这两者之间没有任何关系 信号&#xff1a;信号是在软件层次对中断机制的一种模拟&#xff0c;是一种异步通知机制&#xff0c;用于通知进程发生…

【数据治理】你知道数据加密和脱敏技术?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…