2. 微服务再探
某些人和事,哪怕是路边的风景,可是只要看一眼,依然会让人觉得很美好
在昨天的作业中,我们将黑马商城拆分为5个微服务:
用户服务
商品服务
购物车服务
交易服务
支付服务
由于每个微服务都有不同的地址或端口,入口不同,相信大家在与前端联调的时候发现了一些问题:
请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦
前端无法调用nacos,无法实时更新服务列表
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:
每个微服务都需要编写登录校验、用户信息获取的功能吗?
当微服务之间调用时,该如何传递用户信息?
不要着急,这些问题都可以在今天的学习中找到答案,我们会通过网关技术解决上述问题。今天的内容会分为3章:
第一章:网关路由,解决前端请求入口的问题。
第二章:网关鉴权,解决统一登录校验和用户信息获取的问题。
第三章:统一配置管理,解决微服务的配置文件重复和配置热更新问题。
通过今天的学习你将掌握下列能力:
会利用微服务网关做请求路由
会利用微服务网关做登录身 ...
Gitee图床搭建
Gitee 设置相关
注册Gitee账号
创建仓库 ,名字任意 , 设为公开
进入账号设置 ,创建私人令牌 ,记得将生成的Token复制下来
PicGo 设置相关
安装插件 picgo-plugin-gitee-uploader
配置图床 ,仓库名选择你的Gitee名称/仓库名称
分支默认 :master
token选择从Gitee上复制下来的Token
path : 文件夹名称 ,名字任意
customPath : 这里我选择的年月
没有说到的就是不填
防盗链解决上述设置好之后 ,图片可以上传也可以访问 ,但是却不能在博客中展示 ,图片解决方案
在文章第一行添加代码:
1<meta name="referrer" content="no-referrer">
图片测试:
微服务拆分作业
人生不如意之事七八九,能与人言一二三都无,才算坎坷
1.用户服务1.1.创建项目在hmall下新建一个module,命名为user-service:
1.2.依赖user-service的pom.xml文件内容如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4. ...
1. 初始微服务
自由看似条条框框但是总有一笔出头,牢笼看着透风却被罩住了头
0.导入黑马商城项目在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备:
Centos7的环境及一个好用的SSH客户端
安装好Docker
会使用Docker
0.1.安装MySQL在课前资料提供好了MySQL的一个目录:
其中有MySQL的配置文件和初始化脚本:
我们将其复制到虚拟机的/root目录。如果/root下已经存在mysql目录则删除旧的,如果不存在则直接复制本地的:
然后创建一个通用网络:
1docker network create hm-net
使用下面的命令来安装MySQL:
12345678910docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v /root/mysql/da ...
3. 基础算法
3.1 查找概述查找算法是一种在数据集中寻找特定数据项的方法。通常,数据集是在计算机程序中存储的,例如数组、链表或散列表。在编写程序时,查找算法是非常重要的,它有助于快速找到所需的数据。在本文中,我们将介绍一些基本的查找算法及其特点。
线性查找线性查找也称为顺序查找,是一种最简单的查找算法。在这种算法中,我们从数据集的开头开始,逐个比较每个数据项,以寻找要查找的数据。如果我们找到了目标数据,查找过程就结束了。如果我们到达数据集的末尾,仍然找不到目标数据,则可以认为它不存在于数据集中。
线性查找的时间复杂度是O(n),其中n是数据集的大小。因此,它在大型数据集中可能会很慢。然而,在小型数据集中,它仍然是一种非常有用的算法。
二分查找二分查找也称为折半查找,是一种更快速的查找算法。但前提是,数据集必须已经排序。在二分查找中,我们取数据集的中间值,然后将目标与中间值进行比较。如果目标小于中间值,则在左侧子集中继续查找;如果目标大于中间值,则在右侧子集中继续查找。每次比较都会缩小要搜索的数据集的大小。
二分查找的时间复杂度是O(log n),其中n是数据集的大小。这种算法在大型数据集中非常有效 ...
2. 基础数据结构
2.1 数组1) 概述定义
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识
In computer science, an array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key
因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:
1int[] array = {1,2,3,4,5}
知道了数组的数据起始地址 $BaseAddress$,就可以由公式 $BaseAddress + i * size$ 计算出索引 $i$ 元素的地址
$i$ 即索引,在 Java、C 等语言都是从 0 开始
$size$ 是每个元素占用字节,例如 $int$ 占 $4$,$double$ 占 $8$
小测试
1byte[] array = {1,2,3,4,5 ...
本地无法连接Mysql的原因
重启 docker : systemctl restart docker
查看docker中的容器 :docker ps
启动指定容器 docker start mysql 再次查看其中的容器
进行连接
1. 初识算法
1. 什么是算法定义 : 在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算
In mathematics and computer science, an algorithm (/ˈælɡərɪðəm/) is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation.1
Introduction to Algorithm2
不正式的说,算法就是任何定义优良的计算过程:接收一些值作为输入,在有限的时间内,产生一些值作为输出。
Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set ...
SpringCloud 篇
1、什么是Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
2、什么是微服务微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
3、SpringCloud 有什么优势使用 Spring Boot 开发分布式微服务时,我们面临以下问题
(1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽 ...
博客日志
时间轴样式
2025-05-04 16:09
更改下博客主页的文章数由12改为14
2025-05-04 16:09
更换下博客名称 ,更改为:枕月听风
2024-09-10 10:11
添加碎碎念页面 ,并修复其不展示问题
2024-09-03 14:06
前两天引入的LATEX数学公式时灵时不灵 ,开始使用主题自带的数学公式 mathjax
2024-09-01 17:27
引入LATEX数学公式
2024-08-27 07:33
买了个域名用来访问自己的博客 ,并且部署在了netlify 访问速度的话对于我来说足够用了
2024-08-24 08:53
重新更改下版权样式
2024-08-21 08:14
路过图床还是不用的好 ,老是吞图片
2024-08-13 10:24
闲来无事 ,新增藏宝阁样式页面
2024-08-09 21:07
重新调整了下标签样式
2024-08-09 11:14
刚好没什么事 ,魔改了下友链样式
2024-08-05 20:36
看看明天有时间没 ,有时间的话就把最后的尾巴也给重写一下!
2024-08-05 17:26
...
SpringBoot篇
1、为什么要用 SpringBootSpring Boot 优点非常多,如:
一、独立运行
Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到容器中,Spring Boot 只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个 jar 包内。
二、简化配置
spring - boot - starter - web 启动器自动依赖其他组件,简少了 maven 的配置。
三、自动配置 Spring Boot 能根据当前类路径下的类、jar 包来自动配置 bean,如添加一个 spring-boot-starter-web 启动器就能拥有 web 的功能,无需其他配置。
四、无代码生成和 XML 配置
Spring Boo t配置过程中无代码生成,也无需 XML 配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x 的核心功能之一。
五、应用监控
Spring Boot 提供一系列端点可以监控服务及应用,做健康检测。
2、Spring Boot 的核心注解是哪个?它 ...
Spring 篇
1、什么是 spring?Spring 是个 java 企业级应用的开源开发框架。Spring 主要用来开发 Java 应用,但是有些扩展是针对构建 J2EE 平台的 web 应用。Spring 框架目标是简化 Java 企业级应用开发,并通过 POJO 为基础的编程模型促进良好的编程习惯。
2、你们项目中为什么使用 Spring 框架?这么问的话,就直接说 Spring 框架的好处就可以了。比如说 Spring 有以下特点:
轻量: Spring 是轻量的,基本的版本大约 2 MB。
控制反转: Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
面向切面的编程 (AOP) : Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器: Spring 包含并管理应用中对象的生命周期和配置。
MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。
事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
异常处理: Spring ...
MyBatis篇
1、什么是 MyBatis(1)Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。
(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
(3)通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。(从执行 sql 到返回 result 的过程)。
2、说说 MyBatis 的优点和缺点优点:
(1)基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理;提 ...
网络篇
1、HTTP 响应码有哪些?分别代表什么含义?
200:成功,Web 服务器成功处理了客户端的请求。
301:永久重定向,当客户端请求一个网址的时候,Web 服务器会将当前请求重定向到另一个网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。
302:临时重定向,搜索引擎会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为重定向后的网址是暂时的。
400:客户端请求错误,多为参数不合法导致 Web 服务器验参失败。
404:未找到,Web 服务器找不到资源。
500:Web 服务器错误,服务器处理客户端请求的时候发生错误。
503:服务不可用,服务器停机。
504:网关超时。
2、Forward 和 Redirect 的区别?浏览器 URL 地址: Forward 是服务器内部的重定向,服务器内部请求某个 servlet,然后获取响应的内容,浏览器的 URL 地址是不会变化的;Redirect 是客户端请求服务器,然后服务器给客户端返回了一个 302 状态码和新的 location,客户端重新发起 HTTP 请求,服务器给客户端响应 location 对 ...