微服务—远程调用(RestTemplate)

news2024/12/23 12:35:22

          在微服务的所有框架中,SpringCloud脱颖而出,它是目前国内使用的最广泛的微服务框架   (官网地址),它集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用的体验

 服务拆分

服务拆分注意事项:

  • 单一职责:不同的微服务,不要重复开发相同的业务
  • 数据独立:不要访问其他微服务的数据库
  • 面向服务:将自己的业务暴露为接口,供其他微服务调用

       分别的在自己的模块中查询到自己所需要的信息,但是两个服务之间没有任何的联系,我们怎么样才能实现远程调用功能将我们所需要的信息做一个整合返回给我们客户端呢?

假如服务A调用服务B,以后用A、B简称服务

一般有两种方式:

  • RestTemplate

1.在服务A的启动层中注册RestTemplate

@MapperScan("***")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

 2.在A服务的service层远程调用RestTemplate

    @Autowired  //进行依赖注入
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径  服务B请求的URL路径
        String url = "http://http://127.0.0.1:8080/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

       微服务调用方式:RestTemplate请求远程调用是与语言无关性的调用,只要知道对方的ip、端口、接口路径、请求参数即可

  • Feign客户端(后面会细讲)

服务调用的关系

  • 服务提供者:暴露接口给其他微服务调用
  • 服务消费者:调用其他微服务提供的接口
  • 提供者与消费者其实是相对的
  • 一个服务可以同时是服务提供者和服务消费者

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

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

相关文章

Html+JavaScript实现手写签名

前言 Hello各位,本葡萄又来啦,今天遇到的场景是这样的:在日常业务流程中,经常需要某一流程环节中相关责任人员进行审批签字,早期许多公司为了省事就直接会把这位负责人的签名以键盘打字(楷体)的…

Vue CLI创建Vue项目详细步骤

🚀 一、安装Node环境(建议使用LTS版本) 在开始之前,请确保您已经安装了Node.js环境。您可以从Node.js官方网站下载LTS版本,以确保稳定性和兼容性。 中文官网下载 确认已安装 Node.js。可以在终端中运行 node -v 命令…

vite+vue3项目配置cdn引入在线依赖

采用ejs的方式 安装语法依赖 npm install vite-plugin-ejs -D配置暴露数据 vite.config.js文件: import { fileURLToPath, URL } from node:url import { defineConfig, loadEnv } from vite import vue from vitejs/plugin-vue import vueJsx from vitejs/plug…

常用的分布式计算引擎

记录一下,作为备忘。 常用的分布式计算引擎 多表关联的问题,由于NoSQL数据库主要用于海量存储和单表查询,一般都不支持join,需借助更上层的计算框架来实现多表关联,比如: 计算框架支持数据源执行效率Hive本地文件、…

长胜证券:宁德时代发布神行超充电池 信创利好政策陆续出台

昨日,两市股指早盘震动回升,午后再度回落,尾盘加快下行。截至收盘,沪指跌0.82%报3150.13点,深成指跌0.94%报10579.56点,创业板指跌0.73%报2132.97点,科创50指数跌1.71%;两市算计成交…

uni-app调用java代码(uniapp调用安装原生插件aar)

uni-app调用java代码(uniapp调用安装原生插件aar) 文章目录 uni-app调用java代码(uniapp调用安装原生插件aar)前言一、开发环境、文档资料1.Java环境下载2.App离线SDK下载3.AndroidStudio下载4.HBuilderX下载5.uni-app扩展原生插件文档6.插件官方示例 二、将Java代码打包成aar文…

MD5、RSA 和自定义签名的 Java 数据安全实战

前言 在现代的数字世界中,数据的安全性和完整性变得尤为重要。为了确保数据在传输和存储过程中不受到攻击,我们可以借助各种加密和签名技术来加强数据安全。本文将介绍如何使用 MD5、RSA 加密,以及如何自定义签名规则来保护数据的安全性。下…

ISO 21202:2020 智能交通系统 - 部分自动变道系统 (PALS) - 功能/操作要求和测试规程

​ 介绍 一般来说,车辆配备的驾驶辅助系统和自动驾驶系统可减轻驾驶员的负担,有助于安全驾驶。就变道操作而言,有许多驾驶员并不擅长变道,为了辅助这类驾驶员,部分自动变道系统(PALS)可根据驾驶员的要求,在驾驶员的监督下,在禁止非机动车和行人通行、有明显车道标记的…

C#中的委托

目录 概述: 举例:​ 总结: 概述: 中文的角度来说:指的是把事情托付给别人或别的机构(办理),造个句子:别人委托的事情,我们一定要尽力而为,不遗余力的去办成。 在C#中,委托是一种…

TCP/IP协议组

TCP/IP通信协议是目前最完整、使用最广泛的通信协议。它的魅力在于可使不同硬件结构、不同操作系统的计算机相互通信。TCP/IP协议既可用于广域网,也可用于局域网,它是Internet/Intranet的基石。TCP/IP通信协议事实上是一组协议。 TCP/IP协议可分为5层也可…

图像处理的未来:揭秘扫描全能王的AI驱动创新

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

LeetCode235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 文章目录 [235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)一、题目二、题解方法一:递归方法二:迭代 一、题目 给定一个二叉搜索树, 找到该树中两个指定…

java八股文面试——String StringBuilder StringBuffer

String类型定义: final String 不可以继承 final char [] 不可以修改 String不可变的好处: hash值只需要算一次,当String作为map的key时, 不需要考虑hash改变 天然的线程安全 知识来源: 【基础】String、StringB…

安卓手机录屏app合集,总有一种适合你

在现代生活中,录屏已经变得越来越重要。它可以帮助人们记录并分享他们的屏幕内容。在安卓手机上,有很多应用程序可以帮助您进行屏幕录制。本文将介绍一些最好的安卓手机录屏应用程序,以及一些有关录屏技巧。 录屏工具: 迅捷录屏大…

通达信接口开发大全(一)

通达信软件的接口开发主要可以分为以下几个方面: 行情接口:通达信提供行情订阅和实时数据查询接口,可以获取市场行情数据。开发者通过这些接口获取股票、期货、外汇等市场的实时行情数据,包括价格、成交量、买卖盘等。 交易接口&…

博弈论简介

目录 博弈分类 合作与非合作博弈: 同时与顺序博弈: 完全信息与不完全信息博弈: 零和与非零和博弈: 囚徒困境的例子 纳什平衡 代码示例 博弈论是一个数学分支,研究多个理性决策者之间的战略互动。它的主要目的是…

Kafka 集群搭建过程

前言 跟着尚硅谷海哥文档搭建的Kafka集群环境,在此记录一下,侵删 注意:博主在服务器上搭建环境的时候使用的是一个服务器,所以这篇博客可能会出现一些xsync分发到其他服务器时候的错误,如果你在搭建的过程中出现了错…

CKZF-D60170、CKZF-D70190、CKZF-D80210单向离合器

CKZF-C30100、CKZF-C35110、CKZF-C40125、CKZF-C45130、CKZF-C50150、CKZF-C55160、CKZF-C60170、CKZF-C70190、CKZF-C80210、CKZF-C90230、CKZF-C100270、CKZF-C130310、CKZF-B30100、CKZF-B35110、CKZF-B40125、CKZF-B45130、CKZF-B50150、CKZF-B55160、CKZF-B60170、CKZF-B7…

Java课题笔记~ 什么是跨域?

什么是跨域? 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。 域名: 主域名不同 百度一下,你就知道 -->新浪网 子域名不同 http://www.666.baidu.com/index.html -->htt…

原生js获取今天、昨天、近7天的时间(年月日时分秒)

有的时候我们需要将今天,昨天,近7天的时间(年月日时分秒)作为参数传递给后端,如下图: 那怎么生成这些时间呢?如下代码里,在methods里的toDay方法、yesterDay方法、weekDay方法分别用于生成今天、昨天和近7天的时间: <template><div class="box"&…