springcloud-服务拆分与远程调用

news2024/11/25 15:26:52

一 微服务

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 效果图

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

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

相关文章

温故而知新-Spring篇【面试复习】

温故而知新-Spring篇【面试复习】 前言版权推荐温故而知新-Spring篇IOCAOP循环依赖springboot如果要对属性文件中的账号密码加密如何实现?SpringBoot的优点Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 最后 前言 2023-7-31 15:…

React18 apexcharts数据可视化之折线图

基础折线图 import ApexChart from react-apexcharts;export function Basic() {// 数据序列const series [{name: "Desktops",data: [10, 41, 35, 51, 49, 62, 69, 91, 148]},]// 图表选项const options {// 图表chart: {height: 650,type: line,zoom: {enabled:…

QT学习(20):QStyle类

Qt包含一组QStyle子类,这些子类(QWindowsStyle,QMacStyle等)模拟Qt支持的不同平台的样式,默认情况下,这些样式内置在Qt GUI模块中,样式也可以作为插件提供。 Qt的内置widgets使用QStyle来执行几…

基于vuestic-ui实战教程 - 页面篇

1. 简介 前面介绍了基本的内容比如如何获取动态数据,下面就到登录进来后的页面实现了,相信各位读者或多或少都有 element-uijs 的实战经历,那么 vuestic-uits 实现的页面又该如何写呢?带着疑问开启今天的学习(声明由于…

【个人博客搭建】(20)获取操作用户信息(IHttpContextAccessor)

IHttpContextAccessor在ASP.NET Core中扮演着至关重要的角色。它为开发者提供了一种方便的方式来访问和操作HttpContext对象,从而允许在整个应用程序中轻松地管理和使用HTTP请求和响应的相关信息。下面将深入探讨IHttpContextAccessor的作用、使用方法以及如何通过它…

Round-Robin 调度逻辑算法

Round-Robin 调度逻辑算法 1 Intro1.1 固定优先级1.2 Round-Robin算法 之前上学还是工作,都接触过调度算法:Round-Robin和weight-Round Robin算法,但只知道它的功能和目的是什么,没有具体了解如何实现的; 现在是工作上…

【漏洞复现】用友NC registerServlet JNDI 远程代码执行漏洞(XVE-2024-10248)

0x01 产品简介 用友NC是 用友软件股份有限公司开发的一套企业级管理软件系统。它是一个基于互联网的多层应用系统,旨在为中大型企业提供全面、集成的管理解决方案。是一种商业级的企业资源规划云平台,为企业提供全面的管理解决方案,包括财务…

什么情况下JVM内存中的一个对象会被垃圾回收?

什么情况下JVM内存中的一个对象会被垃圾回收? 1、什么时候会触发垃圾回收?2、被哪些变量引用的对象是不能回收的?3、Java中对象不同的引用类型4、finalize()方法的作用1、什么时候会触发垃圾回收? 平时我们系统运行创建的对象都是优先分配在新生代里的,如图: 然后如果…

技术驱动未来,全面揭秘 Sui 的生态发展和布局

在不到一年的时间里,由 Mysten Labs 团队创立的 Layer1 区块链 Sui 迅速崛起,成功跃升至去中心化金融(DeFi)的前十名。根据 DeFi Llama 的数据,Sui的总锁定价值(TVL)在短短四个月内增长超过 100…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致! 比如:System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

登录记住密码背景颜色修改

1,在login.vue中&:-webkit-autofill里面的css替换成如下 &:-webkit-autofill {box-shadow: 0 0 0px 1000px $bg inset !important;-webkit-text-fill-color: $cursor !important;}

scp问题:Permission denied, please try again.

我把scp归纳三种情况: 源端root——》目标端root 源端root——》目标端mysql(任意)用户 源端(任意用户)——》目标端root用户 在scp传输文件的时候需要指导目标端的用户密码,如root用户密码、mysql用户…

拖线无人机技术:像风筝一样飞行,无人能干扰

拖线无人机技术是一种独特且高效的无人机应用技术,其设计理念源于风筝。这种无人机不仅能够在空中稳定飞行,而且具备极强的抗干扰能力,使其在各种复杂环境下都能保持通信畅通和任务执行的高效。 拖线无人机技术的核心在于其拖线系统。与传统的…

【高校科研前沿】湖北工业大学为第一署名单位在《Science》发表Letters文章:应对青藏高原河流泥沙激增

文章简介 论文名称:Combating sediment surge in Tibetan rivers(应对青藏高原河流泥沙激增) 相关作者及单位:杨洪教授(英国雷丁大学)&刘德富教授(湖北工业大学)&Julian R…

vite+js配置

vite js 配置路径 npm install types/node --save-dev vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue //需要引入 import path from path// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],resolve: {a…

sql注入利用group_concat函数

1.group_concat函数的作用: 首先根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。 2.group_concat运用 这里我使用的是sqllab-less1,通过对数据库的查询,我们发现数据库表名,列名&a…

大模型日报|今日必读的 5 篇大模型论文

大家好,今日必读的大模型论文来啦! 1.Meta 领衔:一文读懂视觉语言建模(VLM) 人们正在尝试将大型语言模型(LLMs)扩展到视觉领域。从可以引导我们穿越陌生环境的视觉助手,到仅使用高…

“2024 亚马逊云科技中国峰会,挑战俱乐部 Hands On 动手实验课程正在直播中,点击链接畅享生成式AI建构之旅,赢心动好礼

只看不过瘾?别急!我们为您准备了【生成式AI助手 Amazon Q 初体验】动手实验,一款生成式人工智能 (AI) 支持的对话助理,可以帮助您理解、构建、扩展和操作 Amazon 应用程序,您可以询问有关 Amazon 架构、最佳实践、文档…

AD使用问题

设计流程: 1.先创建项目——添加原理图,原理图库,PCB,PCB库 2.画原理图库和封装库 主要有三种方法: (1)手动画库和封装,常常用于嘉立创查询不到的器件 (2&#xff0…

29【PS 作图】宫灯 夜景转换

夜景转化 1 原图 2 选中要变换的图层,然后点击“颜色查找” 再3DLUT文件中,选择moonlight.3DL,可以快速把图层变成偏夜景的颜色 结果如下: 3 选择“曲线” 把曲线 右边往上调【亮的更亮】,左边往下调【暗的更暗】 4 添加灯光 新建一个图层