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

这篇具有很好参考价值的文章主要介绍了SpringBoot项目模块间通信的两种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

(两个模块是独立的)

SpringBoot项目模块间通信的两种方式,分布式,java,springboot


用户实体类

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(),向用户模块发送查询用户信息请求;

    @Override
    public 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 {

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

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

    @Autowired
    private RestTemplate restTemplate;
	
    @Override
    public 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()方法返回值类型

SpringBoot项目模块间通信的两种方式,分布式,java,springboot

测试

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

SpringBoot项目模块间通信的两种方式,分布式,java,springboot文章来源地址https://www.toymoban.com/news/detail-550833.html

到了这里,关于SpringBoot项目模块间通信的两种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【SpringBoot系列】Springboot使用kafka的两种方式

    🤵‍♂️ 个人主页:@香菜的个人主页,加 ischongxin ,备注csdn ✍🏻作者简介:csdn 认证博客专家,游戏开发领域优质创作者,华为云享专家,2021年度华为云年度十佳博主 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂

    2024年02月05日
    浏览(36)
  • 【IDEA】maven项目刷新依赖的两种方式

    两种方式:         ①手动刷新         ②自动刷新 通常情况下,在我们创建 maven 项目时,右下角会弹出提示框 这里讲一下二者的区别: Import Changes :导入当前pom.xml新添加的依赖; Enable Auto-Import :在修改pom.xml后,自动下载依赖。 选择  Import Changes ,意味着每次修改p

    2024年02月16日
    浏览(37)
  • idea中导入maven项目的两种方式

    每个maven模块,右侧都会有一个Maven侧边栏,可以打开侧边栏,点上面“+”号,导入maven; 快捷键ctrl+shift+alt+s,打开项目结构,在项目结构中导入 值得一提的是,选择maven文件夹也可以导入

    2024年02月15日
    浏览(44)
  • SpringBoot调用第三方WebService接口的两种实现方式

    WebService接口的发布通常一般都是使用WSDL(web service descriptive language)文件的样式来发布的,该文档包含了请求的参数信息,返回的结果信息,我们需要根据WSDL文档的信息来编写相关的代码进行调用WebService接口。接下来我将采用常见的两种方式调用WebService接口。 目前我需要

    2024年02月12日
    浏览(49)
  • idea将普通项目更改为maven项目的两种方式

    今天写demo的时候发现自己建的项目不是maven项目,建时忘记了,demo已经写了很多了,于是找了几种普通项目更改成maven项目的方法。 右键工程文件,新建文件pom.xml,并填写好内容。 在pom.xml 文件上右键 Add as Maven Project。 3.idea自己导入maven。

    2024年02月15日
    浏览(32)
  • Springboot之把外部依赖包纳入Spring容器管理的两种方式

    在Spring boot项目中,凡是标记有@Component、@Controller、@Service、@Configuration、@Bean等注解的类,Spring boot都会在容器启动的时候,自动创建bean并纳入到Spring容器中进行管理,这样就可以使用@Autowired等注解,在需要使用bean的业务类中进行注入。这里起到关键作用的就是@ComponentScan,

    2024年02月14日
    浏览(37)
  • SpringBoot整合WebSocket的两种方式及微服务网关Gateway配置

    项目中后台微服务需要向前端页面推送消息,因此不可避免的需要用到WebSocket技术。SpringBoot已经为WebSocket的集成提供了很多支持,只是WebSocket消息如何通过微服务网关Spring Cloud Gateway向外暴露接口,实际开发过程中遇到了很多问题。微服务框架本身是作为一个平台为各种服务

    2024年02月03日
    浏览(35)
  • 简述vue项目中的两种请求方式(axios和vueResource)

    今天学习了vue的两种发送请求的方式,vueResource和axios,比较了两种方式的使用 VueResource模块发送请求 1. VueResource概述 VueJS的生态圈除了VueRouter之外,还有很多的插件,在网络请求中,vue是借助于vue-resource模块来进行异步请求,跨域请求。 vue-resource是Vue.js的一款插件,它可以

    2024年02月03日
    浏览(34)
  • 学习笔记230810--vue项目中get请求的两种传参方式

    问题描述 今天写了一个对象方式传参的get请求接口方法,发现没有载荷,ip地址也没有带查询字符串,数据也没有响应。 代码展示 错误分析 实际上这里的 query 是对象方式带参跳转的参数名,而get方法对象方式传参的参数名是parmas 解决方法 get请求有两种带参的方式 方式1 :

    2024年02月10日
    浏览(31)
  • 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)

    与EC20 4G模组所需的文件,下载链接,请点击即可   关于 EC20 4G 模块的详细资料请找卖家索要!   EC20 有多种不同的配置,比如全网通纯数据版本、语音版、带 GNSS 版等等,建议大家购买的时候至少要选择全网通数据版,因为我们使用 4G 模块主要还是用于数据通信的。移远

    2023年04月26日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包