SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate

news2024/9/27 19:14:19

在我们的业务流程之中不一定都会是自己模块查询自己模块的信息,有些时候就需要去结合其他模块的信息来进行一些查询完成相应的业务流程,但是在SpringCloud每个模块都相对独立,数据库也有数据隔离。所以当我们需要其他微服务模块的信息的时候,就需要跨模块调用发起网络请求。

就像电商项目中,购物车模块就不得不需要像商品模块发起查询请求。购物车业务中需要查询商品信息,但商品信息查询的逻辑全部迁移到了item-service服务,导致我们无法查询。

最终结果就是查询到的购物车数据不完整,因此要想解决这个问题,我们就必须改造其中的代码,把原本本地方法调用,改造成跨微服务的远程调用(RPC,即Remote Produce Call)。

因此,现在查询购物车列表的流程变成了这样:

那么:我们该如何用Java代码发送Http的请求呢?

RestTemplate

Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请求的发送。

rg.springframework.web.client public class RestTemplate

extends InterceptingHttpAccessor

implements RestOperations

----------------------------------------------------------------------------------------------------------------

同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 RestTemplate通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。如果需要,您可以在启动时创建多个不同配置的RestTemplate实例。如果这些实例需要共享HTTP客户端资源,它们可以使用相同的底层ClientHttpRequestFactory。 注意:从5.0开始,这个类处于维护模式,只有对更改和错误的小请求才会被接受。请考虑使用org.springframework.web.react .client. webclient,它有更现代的API,支持同步、异步和流场景。

其中提供了大量的方法,方便我们发送Http请求,例如:

可以看到常见的Get、Post、Put、Delete请求都支持,如果请求参数比较复杂,还可以使用exchange方法来构造请求。

我们在需要的微服务中定义一个配置类:

在启动类中先将RestTemplate注册为一个Bean:

@SpringBootApplication
public class CartApplication {
    public static void main(String[] args) {
        SpringApplication.run(CartApplication.class, args);

    }


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

远程调用

接下来,我们修改cart-service中的实现类的handleCartItems方法,发送http请求到item-service

// 2.查询商品
//        List<ItemDTO> items = itemService.queryItemByIds(itemIds);
        //1.利用RestTemplate发起Http的请求,得到Http的响应
        ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
                "http://localhost:8081/items?ids={ids}",//请求路径
                HttpMethod.GET,//请求方式
                null,//请求实体
                new ParameterizedTypeReference<List<ItemDTO>>() {
                },//返回值类型
                Map.of("ids", CollUtil.join(itemIds, ","))
        );
        //2.解析响应
        if (!response.getStatusCode().is2xxSuccessful()){
            //查询失败,结束
            return;
        }
        List<ItemDTO> items = response.getBody();
        if (CollUtils.isEmpty(items)) {
            return;
        }

可以看到,利用RestTemplate发送http请求与前端ajax发送请求非常相似,都包含四部分信息:

  • ① 请求方式

  • ② 请求路径

  • ③ 请求参数

  • ④ 返回值类型

@RequiredArgsConstructor
public class CartServiceImpl extends ServiceImpl<CartMapper, Cart> implements ICartService {

    private final RestTemplate restTemplate;

使用@RequiredArgsConstructor注解可以把final修饰的变量视为常量产生构造方法,比@AllArgsConstructor更适合

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

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

相关文章

HackTheBox--IClean

IClean测试过程 1 信息收集 NMAP端口扫描 80端口测试 echo "10.10.11.12 capiclean.htb" | sudo tee -a /etc/hosts检查页面功能&#xff0c;除了 login 页面无其他可能利用点&#xff0c;可以尝试进行目录爆破和子域名扫描 目录扫描 ./gobuster dir -u http://c…

使用paddleOCR训练自己的数据集到ONNX推理

一、环境安装 1、安装paddlepaddle&#xff1b; https://www.paddlepaddle.org.cn/ 这里安装2.6.1的话使用onnx会出现swish算子报错的问题 python -m pip install paddlepaddle-gpu2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple验证是否成功安装 python import paddl…

C++11——新特性超详细总结

目录 一、C11介绍 二、为什么要用C11 三、新特性总结 1、类型推导&#xff08;auto/decltype&#xff09; 2、序列for循环语句 3、 lamdba表达式 4、构造函数&#xff1a;委托构造和继承构造 5、容器&#xff08;array/forward_list&#xff09; 6、垃圾回收机制 7、…

MySQL Buffer Pool

总结自&#xff1a;小林coding&#xff0c;bojiangzhou 虽然说 MySQL 的数据是存储在磁盘里的&#xff0c;但是也不能每次都从磁盘里面读取数据&#xff0c;这样性能是极差的。 要想提升查询性能&#xff0c;加个缓存就行了嘛。所以&#xff0c;当数据从磁盘中取出后&#xff…

大话C语言:第29篇 指针

1 指针概念 指针&#xff1a;地址的变量化形式&#xff0c;其存储的是内存中某个存储单元的地址。它是地址的数值表示。 指针变量&#xff1a;一种特殊的变量&#xff0c;它专门用于存放变量的地址&#xff08;即指针&#xff09;。 注意&#xff0c;指针和指针变量的区别&am…

uniapp+uview实现手机端上传照片带水印(保姆级全过程)

目录 前言&#xff1a;实现思路 步骤一、在界面使用uview的u-upload组件、放置canvas标签 步骤二、在afterRead方法中获取照片url&#xff0c;并创建画布生成水印&#xff0c;再将生成水印的照片上传到服务器 1、afterRead方法 2、照片加水印的方法 3、上传照片至服务器 …

项目管理:这样制定计划,让你事半功倍

在项目管理中&#xff0c;制定计划是成功的关键&#xff0c;一个完善的计划不仅能够明确项目的方向和目标&#xff0c;还能为团队成员提供清晰的行动指南。 制定计划的四大要素——做什么、怎么做、何时做、谁来做&#xff0c;为这一过程提供了坚实的框架。而甘特图作为一种直观…

OS Copilot:新手测评体验

文章目录 前言一、OS Copilot&#xff08;阿里云操作系统智能助手&#xff09;简介二、测评体验总结OS Copilot 产品体验评测OS Copilot 产品功能反馈 前言 本文简单分享一下自己使用OS Copilot测评体验。 一、OS Copilot&#xff08;阿里云操作系统智能助手&#xff09;简介 …

普通人必看!AI绘画商业变现全攻略(附教程)

大部分的设计师除了主业以外&#xff0c;都会利用空余时间去接单做副业。 单子包括但不限于产品/品牌LOGO、电商产品图设计、海报、室内设计图等等&#xff0c;单价在几十到上千不等 引起了我的思考&#xff0c;我们普通人有没有机会&#xff0c;也能像他们一样去接单赚钱吗&a…

挖K脚本检测指南

免责声明:本文仅做分享... 目录 挖K样本-Win&Linux-危害&定性 Linux-Web 安全漏洞导致挖K事件 Windows-系统口令爆破导致挖K事件 --怎么被挖K了??? 已经取得了权限. 挖K样本-Win&Linux-危害&定性 危害&#xff1a;CPU 拉满&#xff0c;网络阻塞&…

Spring最早的源码

地址&#xff1a;Spring最早的源码

Uniapp组件使用的详细步骤

官方文档&#xff1a;uni-app官网 (dcloud.net.cn) 一般用到的组件都在这里&#xff1a; 看介绍里面的注意事项&#xff0c;有注意的地方认真查看&#xff0c;使用的时候例如&#xff0c;以下示例日历&#xff0c;把代码粘贴到你的文件里&#xff0c;然后下载组件 1&#xff…

商家转账到零钱分销返佣场景驳回处理办法

在处理商家转账到零钱分销返佣场景被驳回的问题时&#xff0c;商家需要了解驳回的原因&#xff0c;并采取相应的措施来解决这些问题。下面将详细介绍几种常见的驳回原因以及应对策略&#xff1a; 1. 多级分销模式问题 • 原因&#xff1a;如果业务模式涉及多级分销&#xff0c;…

数据安全治理:从库级权限申请到表级权限申请

背景 随着数据安全意识的提高&#xff0c;企业越来越重视数据治理和权限管理。传统数仓大多对库级别进行读写授权&#xff0c;仅对人工标记的敏感库进行表级别授权&#xff0c;但由于敏感等级是由人为标记&#xff0c;错误率较高&#xff0c;故期望将权限申请流程细化到表级申…

Datawhale AI 夏令营 机器学习挑战赛

一、赛事背景 在当今科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的深度和广度渗透到科研领域&#xff0c;特别是在化学及药物研发中展现出了巨大潜力。精准预测分子性质有助于高效筛选出具有优异性能的候选药物。以PROTACs为例&#x…

PHP调查问卷小程序系统源码

&#x1f4ca;【问卷新风尚】调查问卷系统小程序&#xff0c;让数据收集更简单&#xff01; &#x1f4f1;【指尖轻点&#xff0c;问卷即刻生成】 告别繁琐的问卷设计过程&#xff0c;调查问卷系统小程序让你在指尖轻点间&#xff0c;就能轻松创建出专业、美观的问卷。无论是…

文章SameStr(五):图5代码

“Publication Figure 5” 百度云盘链接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取码: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special library(caret) library(randomForest) library(vip)…

Kudu分区策略

Kudu表的分区策略主要有三种&#xff1a;范围分区&#xff08;Partition By Range&#xff09;、哈希分区&#xff08;Partition By Hash&#xff09;和高级分区&#xff08;Partition By Hash And Range&#xff09;。这些策略都要求分区字段必须包含在主键中。 范围分区&…

内网-有道词典离线翻译安装

一、外部操作 1、在外部下载有道翻译桌面版 下载地址 2、安装到指定目录 3、登录下载离线翻译包 进入设置 -》离线增强-》离线翻译数据包-》翻译包 选择汉英互译 4、找到离线包位置 C:\Users\用户\AppData\Local\Yodao &#xff0c;此处查看自己用户所在C盘位置 二、内网…

【ai】pycharm添加本地解释器

解释器右键可以重命名 系统的解释器竟然安装了4个 可以先使用python虚拟环境中的解释器 虚拟环境虽然是属于其他的项目的&#xff0c;但是看起来也可以给自己的当前项目用&#xff1a; 添加了 别的项目里虚拟环境的解释器