Springcloud快速复习

news2024/12/22 23:01:05

按照个人的习性,分布式我学习完以后一定会忘为此写次笔记自己快速复习

目录

  1. Springcloud介绍
  2. 注册中心

Springcloud介绍及微服务介绍

  • 为什么学?
    也不是以前的单体架构被淘汰而是,当业务足够大型,进行优化

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
在这里插入图片描述

优点:

  1. 架构简单
  2. 部署成本低

缺点:

耦合度高(维护困难、升级困难)

所以就要对传统单体项目进行优化,而分布式就是很好的方式

分布式架构

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
在这里插入图片描述

分布式架构的优缺点:

优点:

  • 降低服务耦合
  • 有利于服务升级和拓展

缺点:

  • 服务调用关系错综复杂

分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:

  • 服务拆分的粒度如何界定?
  • 服务之间如何调用?
  • 服务的调用关系如何管理?

人们需要制定一套行之有效的标准来约束分布式架构。

微服务

微服务的架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
  • 自治:团队独立、技术独立、数据独立,独立部署和交付
  • 面向服务:服务提供统一标准的接口,与语言和技术无关
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

在这里插入图片描述
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,可以认为微服务是一种经过良好架构设计的分布式架构方案
任何分布式架构都离不开服务的拆分,微服务也是一样。

服务拆分原则

这里我总结了微服务拆分时的几个原则:

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

但方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。

其中在Java领域最引人注目的就是SpringCloud提供的方案了。

Springcloud

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。
其中常见的组件包括:
在这里插入图片描述
完整的微服务框架,所需中间件
在这里插入图片描述

通过docker容器部署
在这里插入图片描述

SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系需要到官网查看
在这里插入图片描述
所以接下来快速复习各个中间件的使用

注册中心 Eureka,nacos

什么是注册中心呢,百度定义

“注册中心的作用一句话概括就是存放和调度服务,实现服务和注册中心,服务和服务之间的相互通信。注册中心可以说是微服务架构中的”通讯录“,它记录了服务和服务地址的映射关系.

现在建立俩个服务端(user,order)作为微服务部分演示,俩者具有不同的数据库,但是俩个微服务数据具有关联,为此暴露接口完成交互,勇主持中心演示

user部分

实体类

@Data
public class User {
    private Long id;
    private String username;
    private String address;
}

业务层

@Service
public class UserService {

//    @Autowired
    @Resource
    private UserMapper userMapper;

    public User queryById(Long id) {
        return userMapper.findById(id);
    }
}

mapper数据层

@Mapper
public interface UserMapper {
    
    @Select("select * from tb_user where id = #{id}")
    User findById(@Param("id") Long id);
}

controller暴露接口,给其他服务使用

@RestController
@RequestMapping("/user")
// @RefreshScope
public class UserController {

    @Autowired
    private UserService userService;


    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id,
                          @RequestHeader(value = "Truth", required = false) String truth) {
        System.out.println("truth: " + truth);
        return userService.queryById(id);
    }
}

order部分

Controller

简单的通过路由查询订单信息
@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private OrderService orderService;

    @GetMapping("{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
        // 根据id查询订单并返回
        return orderService.queryOrderById(orderId);
    }
}

实体类排pojo

@Data
public class Order {
    private Long id;
    private Long price;
    private String name;
    private Integer num;
    private Long userId;
    private User user;
}

注意这里的user实体类俩个服务不同数据库,故此需要多个服务完成交互,先申明user尸体

@Data
public class User {
    private Long id;
    private String username;
    private String address;
}

由于order服务需要向另一个微服务交互,为此引入交互工具,restemplate,springmvc自带注入bean即可
任一配置类

@Bean

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

service服务层

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
@Autowired
    RestTemplate restTemplate;
//    @Autowired
//    private UserClient userClient;
//根据另一个服务端暴露的接口,发送请求完成
    public Order queryOrderById(Long orderId) {
   url="http://localhost:8082/user/"+order.getUserId().toString();
        User user=restTemplate.getForObject(url, User.class);
        order.setUser(user);
        // 4.返回
        return order;
    }
}


因为order服务中,如要获取另一服务的数据,所以需要俩个微服务端进行交互,以上代码是通过rest风格解决完成交互
但是有以下缺点

  • url地址是硬编码,ip,和端口信息需要写死
  • 无法检查各个服务间的安全状态,如果发生宕机且多个服务,那么后果不堪设想
  • 如果仅使用源生的HTTP完成交互,那么每个服务都需要维护其他服务的地址信息,并且这些地址信息还可能会发生变化。这会使得服务之间的通信变得复杂,可能导致某些服务无法通过传统方式进行通信

为此使用注册中心管理微服务中的各个服务,接下来进行优化代替源生http服务交互

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

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

相关文章

SystemUI流程

目录 SystemUI类图 SystemUI流程一:SystemUI启动流程 SystemUI流程二:StatusBar创建流程 SystemUI流程三:系统Notification实现流程 源码基于 Android 12。 SystemUI 是 Android 的系统界面,在 Andorid 系统源码中,…

MySQL安装文档

一、下载 点开下面的链接:https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下载对应的安装包了, 安装包如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0gE9C3W-1682005377951)(assets/image-20221020012428839.png)]…

5. VBA消息框(MsgBox)

MsgBox函数显示一个消息框,并等待用户点击一个按钮,然后根据用户点击的按钮执行相关的操作。 5.1 语法 MsgBox(prompt[,buttons][,title][,helpfile,context]) 5.2 参数说明 prompt - 必需的参数。在对话框中显示为消息的字符串。提示的最大长度大约为…

腾讯云4核8G服务器CVM S5和轻量应用服务器性能PK来了

腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例,轻量4核8G12M服务器446元一年,CVM S5云服务器935元一年,相对于云服务器CVM,轻量应用服务器性价比更高,轻量服务器CPU和CVM有区别吗?性…

ERROR [io.undertow.request] UT005023: Exception handling request 报错处理

1.背景 找了好久,突然灵光乍现是不是因为容器错误问题,本来就是刚从github上下载下来的项目,怎么别人不报错就我报错嘞,我还什么都没改怎么能这样!!!! 这就是我的报错,乍…

storm proxies代理服务器IP如何提高安全性?

代理服务器IP可以通过以下方式来提高安全性: 选择可靠的代理提供商:选择经过信誉验证、有良好用户评价的代理提供商,确保代理服务器IP的稳定性和可靠性,减少被黑客攻击的风险。使用加密通信协议:使用支持加密通信协议&…

【网络编程】网络套接字,UDP,TCP套接字编程

前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 特别说明:本文分享的代码运行结果…

RSA大数N分解Pollard_rho和素数测试Tkinter GUI

RSA大数N分解Pollard_rho和素数测试 系统介绍 : 环境要求: 1、python 2、Tkinter GUI 3、rsa RSA大数N分解和素数测试是密码学中非常重要的问题。其中,RSA算法是基于大质数分解的困难性而设计的公钥加密算法,而素数测试则是判断一个数是…

【0190】Unix 域套接字实战(2)

文章目录 1. UNIX套接字通信2. 为什么需要套接字3. 套接字生命周期4. 示例代码1. UNIX套接字通信 套接字提供进程之间的一种通信方式,即它们交换数据的一种方式。它通常的工作方式是process_a has socket_x, process_b has socket_y, 和两个套接字相连。然后每个进程都可以使…

【Java 数据结构】优先级队列 (堆)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

达梦数据库(DM)的安装教程分享

国产数据库现状 关系型数据库 Oracle 21c 银行、电力、运营商,9i,11g Sqlserver 微软,政府 Mysql 开源 分社区版和商业版 社区版免费 PostgreSQL 开源、国产数据二次开发、学术研究 informix Sybase ERP 行业 DB2 邮政、烟草 国内 武汉达梦(自…

前端面试大全全全全

SEO SEO是搜索引擎优化(Search Engine Optimization)的缩写,它是指通过对网站的优化来提高其在搜索引擎排名中的位置,从而获得更多的有机流量和更好的网站可见度。 SEO主要包括优化网站的内容、结构、代码等方面,使其…

ES6 块级作用域

ES6之前没有块级作用域,ES5的var没有块级作用域的概念,只有function有作用域的概念,ES6的let、const引入了块级作用域。 ​ ES5之前if和for都没有作用域,所以很多时候需要使用function的作用域,比如闭包。 1.1.1 什么…

基于R语言经典地理加权回归,半参数地理加权回归、多尺度地理加权回归、地理加权主成分分析、地理加权判别分析等空间异质性数据分析

目录 专题一 地理加权回归下的描述性统计学 专题二 地理加权主成分分析 专题三 地理加权回归 专题四 高级回归与回归之外 更多推荐 以地理加权回归为基础的一系列方法:经典地理加权回归,半参数地理加权回归、多尺度地理加权回归、地理加权主成分分析…

从个人角度看什么是加密算法

什么是加密?从程序的角度看,加密就是一个函数,它接收明文P和密钥K作为参数,传入加密函数运算后,得到的返回值,称之为密文C C encrypt(P, K);而解密,就是对加密的逆操作。把密文C和密钥K作为参…

102. 二叉树的层序遍历【206】

难度等级:中等 上一篇算法: 215. 数组中的第K个最大元素【382】 力扣此题地址: 102. 二叉树的层序遍历 - 力扣(Leetcode) 1.题目:102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值…

构建清晰、高效的Android应用程序:了解Android架构组件

概述 Android 架构组件是一个由 Google 推出的集成库,旨在使 Android 应用开发更加快捷、高效和易于维护。Android 架构组件提供了一套可扩展的 API,帮助开发者在编写 Android 应用时,更好地组织应用的代码,并提供了一些通用的、…

C++ | 一些你所忽略的类和对象小知识

文章目录 一、再谈构造函数1、初始化列表引入初始化的概念区分语法格式及使用注意事项 2、explict关键字单参构造函数多参构造函数 二、static成员1、面试题引入2、static特性细述3、疑难解惑4、在线OJ实训5、有关static修饰变量的一些注意要点 三、匿名对象四、友元1、友元函数…

iPhone照片太多,如何快速搜索照片?

当你在iPhone中存储了大量照片,如何快速找到其中的某一张照片?通过“照片”应用,你可以轻松查找特定人物、地点、事物或事件的照片。 通过标签查看: 轻点照片应用右下角的“搜索”,iOS 系统会自动将照片分类显示。 时…

java944医院医疗物资管理系统

本系统以医院业务流程为基础,结合考虑医疗物资的特点,主要包含物流信息管理系统中的后勤物资仓库管理、供应消毒物资管理、科室申请领用管理以及查询决策系统等功能。 目 录 1 1课题背景 2 2整体设计 2 2.1 设计目标 2 2.2 系统架构 3…