springcloud-服务拆分与远程调用

一 微服务

1.1简单了解 SpringCloud 

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:Spring Cloud。

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

1.2微服务中的常用组件(面试)

我们脑海中因该出现一幅图:

  • 首先,我们肯定有无数个小的微服务.
  • 这无数个微服务之间是不是要进行一个相互调用,那么就会用到 OpenFeign 这样的组件.
  • 这么多服务要相互调用,怎么去管理呢,这就需要用到 nacos 组件去做注册中心,那么所有的服务就会去找注册中心去注册自己的服务.
  • 那么我拉取到的服务可能是一个列表,那么将来在远程调用的时候就需要做负载均衡,就需要使用 LoadBalancer 这个组件.
  • 这么多服务将来要做统一配置的管理怎么办,就需要引入 nacos 作为配置中心.
  • 这时候微服务集群就形成了,将来对外提供服务,是不是随便什么人都能访问呢?显然不行,所有在微服务群前面就需要有 gateway 网关 作为入口.
  • 那么就算你可以访问了,万一流量激增,引起微服务雪崩,给我整个服务搞崩了,肯定不行,因此就需要 sentinel 来做限流、熔断降级保护.
  • 还有一个问题,在分布式系统下,就会引发分布式事务问题,如何解决呢,这就需要 Seata 上场了.

实际上,微服务的组件远不止于此,还有很多的组件,但是以上呢,就是我们最常用的几个组件啦!

二 服务拆分与远程调用

1 服务拆分

前面我们了解到微服务需要对一块大的服务,拆分成多个小的微服务,那么这个拆分的粒度我们应该如何去把控呢?需要我们注意一下几点:

1. 单一职责:不同微服务,不要重复开发相同业务
2. 数据独立:不要访问其它微服务的数据库
3. 面向服务:将自己的业务暴露为接口,供其它微服务调用
例如:我们将一个大的服务拆分成了订单模块和用户模块,并且每一个微服务有自己的数据库(订单数据库和用户数据库)。由于在不同的数据库中,因此只能通过订单 id 查询订单数据,或者通过用户 id 查询用户数据,不能交叉访问,如下图

2 远程调用

相同的服务,我们可以直接通过 mapper 调用其数据库,不同的服务如何相互调用呢?办法很简单,就如上图,用户模块提供公开的访问接口("/user/{id}"),订单模块主动向用户模块发送 http 请求获取数据,这样就做到了跨服务之间的调用~

2.1注册RestTemplate

package cn.itcast.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import javax.management.MXBean;

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication

public class OrderApplication {

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

    /**
     * 创建RestTemplate并注入Spring容器 ,发送http请求的
     *
     * @return
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

2.2 Mapper调用

在订单服务中,通过 RestTemplate 的 getForObject / postForObject 方法来构造get / post 请求(此处显然使用 get 请求获取用户数据),请求中携带的参数便是订单表中的 userId 数据,当用户微服务接收到请求后,就可以根据 userId 获取用户数据,最后返回到订单服务中,这样就实现了跨服务调用

package cn.itcast.order.service;

import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

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

2.3 效果图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT自然科学应用,R语言lavaan结构方程模型、copula函数

R语言lavaan结构方程模型(SEM) 结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和…

大模型部署_书生浦语大模型 _作业2

本节课可以让同学们实践 4 个主要内容,分别是: 1、部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1安装依赖库: pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

微软为团队推出了 Copilot

微软希望使其生成式人工智能品牌对团队更有用,特别是跨公司和大型企业组织的团队。 在年度 Build 开发者大会上,微软宣布推出 Team Copilot,这是其 Copilot 系列生成式 AI 技术的最新扩展。 与微软之前的 Copilot 品牌产品不同,…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好,我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧,帮助大家迅速增加粉丝。这个方法简单实用,尤其适用于副业和本地生活领域。接下来,我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱:模…

本地开发正常 线上CI/CD构建项目过程报错文件未能正确引用

问题快照 原因分析: 一般遇到这样的错误就是 文件路径或者文件名称未能正确匹配 或者文件不存在 会报这样的错误 以为很好解决 但这次 都排查 了 就是 没发现原因 不管怎么说还是要感谢 GPT的能力(分析问题的能力) 先上图 当我看到 第四步的时候 我立马 去仓库里查…

Go Redis 实现邮件群发

一、安装 go get github.com/go-redis/redis/v8二、邮箱服务配置,以QQ邮箱为例 三、示例代码 package mainimport ("context""fmt"redis "github.com/go-redis/redis/v8""gopkg.in/gomail.v2""gopkg.in/ini.v1"&quo…

怎样查看JavaScript中没有输出结果的数组值?

在JavaScript中,可以方便地定义和使用数组,对于已经定义的数组,怎样查看其值呢? 看下面的示例,并运行它。 上面的示例中,标签不完整,请补充完整再试运行。你知道少了什么标签么? 注…

SEC批准以太坊ETF了吗?

原创 | 刘教链 隔夜BTC击穿了5日均线,回落至67k一线。凌晨传来美SEC批准以太坊ETF的消息,但是ETH上下插针,杵在3.8k,微微下跌。定睛仔细一看,SEC批准了,但又没完全批准,这特么是薛定谔的批准哈&…

本地部署 MiniCPM-Llama3-V 2.5

本地部署 MiniCPM-Llama3-V 2.5 0. 引言1. 性能评估2. 典型示例3. 本地部署4. 运行 WebUI Demo5. vLLM 部署 0. 引言 MiniCPM-Llama3-V 2.5 是 MiniCPM-V 系列的最新版本模型,基于 SigLip-400M 和 Llama3-8B-Instruct 构建,共 8B 参数量,相较…

AWS迁移与传输之AMS/MGN

AWS Application Migration Service(AWS Application Migration Service简称为AWS MGN,MGN是migration的缩写。)是一项全面的迁移服务,旨在帮助企业将其本地服务器和虚拟机迁移到云端,包括AWS和VMware Cloud on AWS。 …

【pyspark速成专家】11_Spark性能调优方法2

目录 ​编辑 二,Spark任务UI监控 三,Spark调优案例 二,Spark任务UI监控 Spark任务启动后,可以在浏览器中输入 http://localhost:4040/ 进入到spark web UI 监控界面。 该界面中可以从多个维度以直观的方式非常细粒度地查看Spa…

防止浏览器缓存了静态的配置等文件(例如外部的config.js 等文件)

防止浏览器缓存了静态的配置文件 前言1、在script引入的时候添加随机数1.1、引入js文件1.2、引入css文件2、通过html文件的<meta>设置防止缓存3、使用HTTP响应头:前言 在实际开发中浏览器的缓存问题一直是一个很让人头疼的问题,尤其是我们打包时候防止的静态配置文件c…

Linux线程:管理与控制

一、引言 随着计算机硬件技术的飞速发展&#xff0c;尤其是多核CPU的普及&#xff0c;多线程编程已成为充分利用系统资源、提高程序并发性和响应速度的关键技术。 多线程编程允许一个程序中同时运行多个线程&#xff0c;每个线程可以独立地执行不同的任务。这种并行处理的方式…

计算机操作系统体系结构

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天给大家讲讲操作系统。 当今的操作系统趋向于越来越复杂&#xff0c;因为它们提供许多服务&#xff0c;并支持各种硬件和软件资源&#xff08;请参见“操作系统思想&#xff1a;尽量保持简单”&#xff0…

Dynadot API调整一览

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

DISCO: Disentangled Control for Realistic Human Dance Generation

NTU&Microsoft CVPR24https://github.com/Wangt-CN/DisCo 问题引入 提高human motion transfer模型的泛化性&#xff1b;给出 f , g f,g f,g作为参考图片的前背景&#xff0c;然后给出单个pose p p t pp_t ppt​或者pose序列 p { p 1 , p 2 , ⋯ , p T } p \{p_1,p_2…

撤销最近一次的提交,使用git revert 和 git reset的区别

文章目录 工作区 暂存区 本地仓库 远程仓库需求&#xff1a;已推送到远程仓库&#xff0c;想要撤销操作git revert &#xff08;添加新的提交来“反做”之前的更改&#xff0c;云端会残留上次的提交记录&#xff09;git reset&#xff08;相当于覆盖上次的提交&#xff09;1.--…

HIGT:用于全景切片图像分析的层次交互图-Transformer

文章目录 HIGT: Hierarchical Interaction Graph-Transformer for Whole Slide Image Analysis摘要方法实验结果 HIGT: Hierarchical Interaction Graph-Transformer for Whole Slide Image Analysis 摘要 在计算病理学领域&#xff0c;全景切片图像&#xff08;WSIs&#xf…

JavaEE-Spring Controller(服务器控制以及Controller的实现和配置)

Spring Controller 服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器&#xff0c;也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成&#xff0c;服务器整体架构如下&#xff1a; Server&…

调整表格大小

方法一&#xff1a;使用鼠标拖动表格边框或右下角的调整控点 在Word文档中&#xff0c;选中要缩小的表格&#xff0c;将鼠标指针放在表格的边框线上&#xff0c;直到指针变成双箭头的形状。 按住鼠标左键&#xff0c;拖动边框线&#xff0c;调整表格的宽度或高度。如果同时按住…