SpringCLoud——服务的拆分和远程调用

2023-10-27

服务拆分

服务拆分注意事项

一般是根据功能的不同,将不同的服务按照功能的不同而分开。

微服务拆分注意事项

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

远程调用

对于远程调用,之前我们说过,微服务之所以不能像单个服务那样互相的调用各自服务的信息,是因为他们各自的服务都部署在各自的服务器上,而与部署在单个服务上不同,跨服务器之间的互相传递信息需要的是请求,而不是调用,所以如果我们想要实现远程调用,首先,我们要将服务向外暴露一个可供访问的请求端口,类似于下面的这种:api.gumengya.com/Api/UserInfo?format=json

当我们访问这个网址的时候,对应的数据就会被返回到浏览器中:

同样的,假设这是你的业务暴露接口,当我们访问这个接口的时候,你对应的服务就会启动,那么你的数据库中的数据就会被查询出来然后被返回到浏览器中。既然请求的对象从之前的单一服务器中的方法变成了一个网址,那么剩下的问题就是【如何在Java中发送Http请求,并将数据获取到】

这样,当我们在执行某些业务服务的时候,就可以通过另一个服务器暴露的接口,查询到存在于另一个服务器以及其数据库中的数据。

在SpringBoot中,我们选择使用RestTemplate来发送HTTP请求。

在使用RestTemplate工具之前,我们首先要创建一个SpringBoot的项目,然后导入Web的依赖:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

然后,我们需要将RestTemplate工具以第三方Bean的方式注册到SpringBoot中:

package Redis;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.web.client.RestTemplateBuilder;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

@SpringBootApplication

public class SpringBootRedisApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootRedisApplication.class, args);

    }

    @Bean

    public RestTemplate RestTemplate(){

        return new RestTemplate();

    }

}

以及,我们需要创建一个用来存储数据的容器类,因为这个请求的数据是嵌套的,所以我们需要两个类:

package Redis.pojo;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

@Data

@AllArgsConstructor

@NoArgsConstructor

public class test {

    private int code;

    private String msg;

    private data data;

}

package Redis.pojo;

import lombok.Data;

@Data

public class data {

    private String ip;

    private String location;

    private String isp;

    private String os;

    private String area;

    private String browser;

}

接下来,就是在测试类中使用RestTemplate来发送请求测试能否正常的拿到数据:

package Redis;

import Redis.pojo.test;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.web.client.RestTemplate;

import java.net.URI;

@SpringBootTest

public class RestTest {

    @Autowired

    private RestTemplate restTemplate;

    @Test

    void RestHttpRequestTest(){

        String url = "https://api.gumengya.com/Api/UserInfo?format=json";

        test forObject = restTemplate.getForObject(url, test.class);

        System.out.println(forObject);

    }

}

运行测试,结果如下:

现在能够顺利的拿到请求的结果,那么这个远程调用的小案例就完成了,做这个案例的意义在于,想象你当前处于微服务的一种一台服务中,比如订单服务,但是现在有一个业务需求是当你在展示订单的时候,顺便展示这个订单的下单用户,这时候,由于微服务的特性,你无法直接调用用户的Service,也无法访问到用户服务的数据库,那么这时候,你只有通过用户服务向外暴露的接口去访问用户的数据信息,这个用户向外暴露的接口,就和我们之前看到的那个网址是一样的,当我们在代码中使用RestTemplate去请求用户的接口的时候,我们就可以拿到用户的信息,并且可以指定不同的请求参数,根据当前服务的请求参数,去获取不同的对应用户的请求参数也是可以的,这就完成了一个最基本的远程调用的过程。

所谓的远程调用,其实就是将之前的单一服务器中,不同的Service之间的方法调用,变成了现在的不同服务之间的HTTP请求调用,其本质还是一样的,发送请求,获取数据。

提供者与消费者

  1. 服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
  2. 服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)

假设,服务A调用了服务B,服务B调用服务C,那么服务B是什么角色。

角色是相对与业务来说的,所以服务具体扮演什么角色,要取决于当时所处的业务环境,【一个服务既可以是提供者,又可以是消费者】。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCLoud——服务的拆分和远程调用 的相关文章

随机推荐

  • APK反编译

    一 需要的工具 apktool 反编译APK文件 得到classes dex文件 同时也能获取到资源文件以及布局文件 下载地址 dex2jar 将反编译后的classes dex文件转化为 jar文件 下载地址 jd gui 用于查看 ja
  • 嵌入式C语言总结

    GCC知识梳理 Q GCC是什么 GCC最初名称 GNU C Compiler 随着其支持的语言越来越多 改称为 GNU Compiler Collection 作用 将编程高级语言翻译为机器语言 Q C语言变成机器指令的过程 gcc 根据
  • web开发-高德地图api2.0-点聚合-包含设置非聚合点的事件绑定以及样式

    web开发 高德地图api2 0 点聚合 包含设置非聚合点的事件绑定以及样式 下面展示一些 内联代码片 非聚合点数据 lnglat里的坐标不一定要双引号 var points weight 8 lnglat 108 939621 34 34
  • Monitoring(监控)

    Monitoring and Instrumentation 有几种方法可以监控Spark应用程序 Web UI 指标和外部检测 Web Interfaces 默认情况下 每个SparkContext都会在端口4040上启动Web UI 以
  • P2661 信息传递(tarjan求强连通分量模板题)

    minn为最小强连通分量的点数 include
  • 企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充。。。

    文章目录 引子 坑一 写代码 前端页面 后端代码 企业微信设置 坑二 网页授权及JS SDK 坑三 配置企业可信IP 最后 引子 我们公司内部用企业微信沟通 最近有个需求 一个应用在企业微信PC版打开时 要自动跳转到PC的默认浏览器 在开发
  • Java 奇偶分离

    public class MiddleHalf public static void main String args int nums 1 4 3 5 0 3 10 int result sortArrayByParity nums fo
  • C++ · 冒泡排序与选择排序

    九月份的第一篇文章 好久没更新了 想起上一次更新还是在上一次 那今天咱们来聊一聊C 中的冒泡排序与选择排序 冒泡排序 排序原理与思想 依次比较相邻的两个数 把大的放前面 小的放后面 即首先比较第1个数和第2个数 大数放前 小数放后 然后比较
  • 【蓝桥杯JavaB组真题详解】三部排序(2013)

    题目描述 三部排序 一般的排序有许多经典算法 如快速排序 希尔排序等 但实际应用时 经常会或多或少有一些特殊的要求 我们没必要套用那些经典算法 可以根据实际情况建立更好的解法 比如 对一个整型数组中的数字进行分类排序 使得负数都靠左端 正数
  • LeetCode(14):最长公共前缀

    描述 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 输入 flower flow flight 输出 fl 输入 dog racecar car 输出 解释 输入不存在公共前缀 class Solut
  • 红米note9pro刷鸿蒙,红米Note9Pro稳定版刷机包(官方系统固件升级包MIUI11)

    Redmi Note 9 Pro采用6 67英寸打孔屏 搭载高通骁龙750G 内置4820mAh大电池 搭载前后双玻璃机身 覆盖大猩猩第五代玻璃 正面为居中挖孔全面屏设计 6 67英寸屏幕 保留3 5mm耳机孔 采用侧面指纹识别 背部为居中
  • 微信小程序分享功能总结

    小程序实现分享功能有如下三种方式 1 在js文件中实现onShareAppMessage函数 即可点击右上角菜单分享给微信好友 页面中默认已实现 在js文件中实现onShareTimeline函数 即可点击右上角菜单分享到微信朋友圈 需要自
  • 联盟链走向何方

    联盟链技术哪家强 开源架构Fabric FISCO BCOS 以下简称 BCOS CITA 技术对比 出品 碳链价值研究院 01 摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能 自动驾驶等一并列入 第四次工业革命 经济学人 曾在
  • qt5.5.1 移植4412的问题过程

    编译错误 WTF wtf unicode wchar UnicodeWchar h In function bool WTF Unicode isAlphanumeric UChar WTF wtf unicode wchar Unicod
  • 开源项目部署之悟CRM部署 PHP服务端版

    文章目录 前言 一 部署环境 二 部署流程 1 安装宝塔等基础环境 2 部署CRM 点击安装即可 在这里插入图片描述 https img blog csdnimg cn 4f83ede5d3f74343a927f8a641c25e19 pn
  • 助推打造全球研发中心城市

    阿里 社招 一面 面不动了 真的面不动了一 项目挑一个你觉得最有挑战性的细说 有些细节被质疑了 嘴在前面飞脑子在后面追 以后说每一句话都要小心 笑cry 二 八股1 聚簇索引和非 题解 检索产品名称和描述 一 select prod nam
  • 3D关键点检测(2020-2017)

    3D关键点检测 1 3D关键点检测之PoseDRL Deep Reinforcement Learning for Active Human Pose Estimation AAAI2020 这篇文章可能与我们通常所处理的姿态估计任务略有不
  • 【BEV】BEVDet

    BEVDet 解析 BEVDet 模型 bevdet r50 训练配置 Scale NMS 优化配置 推理记录 注册 随机种子 总结 BEVDet BEVDet继承于CenterPoint gt MVTwoStageDetector 模型实
  • 射频工程师笔记---射频通信基础

    文章更新或问题可关注本人公众号 回顾一下移动通信技术的发展 其实是互联网和通信技术的融合过程 在这个过程中 很多应用都在不断加入其中 比如计算机跟通信的融合产生了互联网 互联网跟手机的融合带来了移动互联网 手机可以看杂志 看视频 听音乐 于
  • SpringCLoud——服务的拆分和远程调用

    服务拆分 服务拆分注意事项 一般是根据功能的不同 将不同的服务按照功能的不同而分开 微服务拆分注意事项 不同微服务 不要重复开发相同业务 微服务数据独立 不要访问其他微服务的数据库 微服务可以将自己的业务暴露为接口 供其他微服务调用 远程调