SpringBoot项目模块间通信的两种方式

说明:在微服务架构开发中,一个请求是通过模块之间的互相通信来完成的,如下面这个场景:

创建两个子模块:订单模块(端口8081)、用户模块(端口8082),两个模块之间没有联系,现在需要查询订单,根据订单中的用户ID,查询该订单对应的用户信息。

(两个模块是独立的)

在这里插入图片描述


用户实体类

import lombok.Data;import java.io.Serializable;/*** 用户*/
@Data
public class User implements Serializable {/*** ID*/private Long id;/*** 用户名*/private String username;/*** 地址*/private String address;
}

订单实体类,查询订单需要补充用户信息

import lombok.Data;import java.io.Serializable;/*** 订单*/
@Data
public class Order implements Serializable {/*** ID*/private Long id;/*** 价格*/private Double price;/*** 用户ID*/private Long userId;/*** 商品名*/private String name;/*** 商品数量*/private Integer num;/*** 用户信息*/private User user;
}

此时,因为订单模块中没有用户业务,是没有对应的UserMapper类操作数据库的。这就需要向用户模块发送请求,并传递用户ID,由用户模块里对应的方法去操作数据库,返回用户信息。可以用以下两种方式实现。

方式一:Hutool工具包

可使用Hutool工具包中的get(),向用户模块发送查询用户信息请求;

    @Overridepublic Order getOrder(Long id) {Order order = orderMapper.getOrder(id);// 向用户模块发送请求String s = HttpUtil.get("http://localhost:8082/user?id=" + order.getUserId());// 解析相应结果User user = JSONUtil.toBean(s, User.class);order.setUser(user);return order;}

方式二:RestTemplate

使用RestTemplate中的getForEntity()方法,也可以达到同样的效果,使用前,需要手动添加该类到IOC容器中;

(手动添加Bean到IOC容器中)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class AddBean {@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

(使用RestTemplate的getForEntity方法,向用户模块发送请求)

    @Autowiredprivate RestTemplate restTemplate;@Overridepublic Order getOrder(Long id) {Order order = orderMapper.getOrder(id);// 使用restTemplate的getForEntity()方法向用户模块发送请求ResponseEntity<User> entity = restTemplate.getForEntity("http://localhost:8082/user?id=" + order.getUserId(), User.class);// 响应结果是一个response实例,先判断响应状态码是不是成功if (entity.getStatusCode().is2xxSuccessful()) {// 取出响应数据使用User user = entity.getBody();order.setUser(user);}return order;}

restTemplate.getForEntity()方法返回值类型

在这里插入图片描述

测试

postman测试,两者都可以达到相同的效果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 中的 Native SQL 是什么, 如何使用

在 Spring Boot 中&#xff0c;我们通常使用 ORM 框架&#xff08;例如 Hibernate 或 MyBatis&#xff09;来操作数据库。但是&#xff0c;有时候我们需要执行一些自定义的 SQL 查询或更新语句&#xff0c;这时候就需要使用 Spring Boot 中的 Native SQL。 在本文中&#xff0…

常见面试题之JVM实践(调优)

1. JVM调优的参数可以在哪里设置参数值&#xff1f; 1.1 tomcat的设置vm参数 修改TOMCAT_HOME/bin/catalina.sh文件&#xff0c;如下图&#xff1a; JAVA_OPTS"-Xms512m -Xmx1024m" 1.2 springboot项目jar文件启动 通常在linux系统下直接加参数启动springboot项…

鼠标右击没有新建WORD、EXCEL、PPT选项卡解决方案

一、WinR打开运行窗口&#xff0c;输入regedit打开注册表 二、进入到相应位置&#xff0c;复制粘贴到路径处即可 ①word word&#xff1a;计算机\HKEY_CLASSES_ROOT\.docx 计算机\HKEY_CLASSES_ROOT\.doc 看你改哪个都行&#xff0c;我觉得修改第一个docx那个就行&#xff0c…

【Elasticsearch】RestClient操作文档

目录 5.RestClient操作文档 5.1.新增文档 5.1.1.索引库实体类 5.1.2.语法说明 5.1.3.完整代码 5.2.查询文档 5.2.1.语法说明 5.2.2.完整代码 5.3.删除文档 5.4.修改文档 5.4.1.语法说明 5.4.2.完整代码 5.5.批量导入文档 5.5.1.语法说明 5.5.2.完整代码 5.6.小…

[QT编程系列-1]:C++图形用户界面编程,QT框架快速入门培训 - 0- 总述

目录 导言 主要内容 附录&#xff1a; 导言 1. 在这里强调为啥选择 PPT 方式&#xff0c;而不是直接讲解代码 2. 重原理和方法 3. 种 QT 的框架和 QT 的开发流程 4. 轻 UI 界面美观&#xff08; UI 设计单独课程&#xff09; 5. 请代码具体实现&#xff08;后期自学&#xf…

使用selenium爬取猫眼电影榜单数据

文章目录 前言导入所需的库&#xff1a;设置ChromeDriver的路径&#xff0c;并创建一个Chrome浏览器实例&#xff1a;打开目标网页&#xff0c;这里以猫眼电影榜单页面为例&#xff1a;使用XPath定位电影信息。通过查看网页源代码&#xff0c;发现电影信息所在的<dd>标签…

Appium+python自动化(二)- 环境搭建—下(超详解)

简介 上一篇android测试开发环境已经准备好&#xff0c; 那么接下来就是appium的环境安装和搭建了。 环境装好后&#xff0c;可以用真机连电脑&#xff0c;也可以用android-sdk里面的模拟器&#xff08;当然这个模拟器不是很好用&#xff09;&#xff0c;我一般喜欢真机&#…

Git 学习笔记

1、创建本地库&#xff0c;添加文件 1.1 创建本地库 先用git跳转到对应的文件夹下&#xff0c;可以手动创建仓库文件夹&#xff0c;也可以在git中使用如下指令创建并跳转&#xff1a; mkdir filename cd filename 注&#xff1a;这里的filename为文件夹名 随后输入指令&#x…

Centos7编译安装ffmpeg

1、准备工作&#xff0c;安装必要的环境 yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel 2、创建目录 ffmpeg_sources 目录是下载软件包的目录 ffmpeg 目录是安装目录 mkdir /usr/local/ffmpeg_sour…

Git 上传Github 超时问题

提交代码到GitHub总是超时&#xff0c;偶尔会直接上传成功。 提供一下解决方案 1.首先找到网络 2. 找到代理 3. 把自动检查设置全部关闭&#xff0c;然后打开手动设置代理&#xff0c;然后输入ip地址和你代理的端口号&#xff0c;保存即可。 4. 最后使用git push origin mast…

2023-07-10:Kafka如何做到消息不丢失?

2023-07-10&#xff1a;Kafka如何做到消息不丢失&#xff1f; 答案2023-07-10&#xff1a; Kafka采用多种机制来确保消息的不丢失&#xff0c;其中包括副本机制、ISR&#xff08;In-Sync Replicas&#xff09;机制以及ACK机制等。 1.副本机制 Kafka通过副本机制来确保消息不…

Jtti:linux如何查看磁盘驱动器列表?

在Linux系统中&#xff0c;你可以使用以下命令之一来查看磁盘驱动器列表&#xff1a; 1.使用 fdisk 命令&#xff1a;运行以下命令来查看磁盘驱动器列表&#xff1a; 这会列出系统中所有的磁盘驱动器及其分区。 2.使用 lsblk 命令&#xff1a;运行以下命令来查看磁盘驱动器列表…