SpringCloud+Mybatis-Plus+Docker+RabbitMQ+Redis+Elasticsearch黑马商城

一.MyBatis—Plus

一.快速入门

MybatisPlus介绍:MybatisPlus是一个基于Mybatis的增强工具库,旨在简化开发、提升效率,同时保留Mybatis的灵活性。它在Mybatis的基础上只做增强不做改变,引入它不会对现有工程产生影响

官网:简介 | MyBatis-Plus

使用MybatisPlus的基本步骤:

1.引入MybatisPlus依赖,代替Mybatis依赖

2.定义Mapper接口并继承BaseMapper

常见注解:

基本原理:mp通过扫描实体类,并基于反射获取实体类信息作为数据库表信息

@TableName:用来指定表名

@Tableld:用来指定表中的主键字段信息

@TableField:用来指定表中的普通字段信息

小结

常见配置

二.核心功能

条件构造器

QueryWrapper

UpdateWapper

AbstractLambdaWrapper

小结

自定义SQL

我们可以利用mp的Wrapper来构建复杂的where条件,然后字节定义sql语句的剩下部分

Service接口

三.插件功能

常用插件

分页插件

使用

二.Docker

一.Docker入门

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/

docker架构图:

docker元素

二.Docker实战

1.搜索镜像
docker search nginx


2.下载镜像
docker pull nginx
3.查看镜像
docker images


4.启动容器
docker run -d --name nginx -p 8080:80 nginx


5.查看容器
docker ps


6.测试访问
127.0.0.1:8080

三.微服务架构

一.微服务介绍

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署

微服务架构:是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立的项目

SpringCloud

官网地址:Spring Cloud

二.熟悉黑马商城

黑马商城:

用户模块 商品模块 购物出模块 订单模块 支付模块

登录

三.服务拆分原则

什么时候拆分?

创业型项目:先采用单体架构,快速开发,快速试错。随着规模扩大,逐渐拆分

确定的大型项目:资金充足,目标明确,可以直接选择微服务架构,避免后续拆分的麻烦

怎么拆分?

高内聚:每个微服务的职责要尽量单一,包含的业务相互关联度高,完整度高

低耦合:每个微服务的功能要相对独立,尽量减少对其他微服务的依赖

拆分方式:

横向拆分:抽取公共服务。提高复用性

纵向拆分:按照业务模块来拆分

四.Nacos服务调用

Nacos注册中心

服务注册

服务发现

调用服务

五.OpenFeign

快速入门

连接池

最佳实践

日志

小结

六.网关

网关:就是网络的关口,负责请求的路由,转发,身份校验

实现

快速入门

1.创建新模块

2.引入网关依赖

3.编写启动类

4.配置路由规则

路由属性

网关路由对应的Java类型是RouteDefinition,其中常见的属性有:

id:路由唯一表示

url:路由目标地址

predicates:路由断言

filters:路由过滤器

网关登录校验

七.配置管理

微服务重复配置过多,维护成本高

业务配置经常变动,每次修改都要重启服务

网关路由配置写死,如果变更要重启网关

配置共享

1.添加共享配置

2.拉取共享配置

a.引入依赖

b.新建bootstrap.yaml

配置热更新

配置热更新:当修改配置文件中的配置时,微服务无需重启即可使配置生效

小结

八.微服务保护

雪崩问题:微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。

解决思路:

1.尽量避免服务出现故障或者阻塞

2.做好远程调用异常的后备方案,避免故障扩散

服务保护方案——请求限流

请求限流:限制访问微服务的请求的并发量,避免服务因流量激增出现故障。

服务保护方案——线程隔离

线程隔离:也叫做舱壁模式,模拟船舱隔板的防水原理。通过限定每个业务能使用的线程数量而将故障业务隔离,避免故障扩散。

服务保护方案——服务熔断

服务熔断:由断路器统计请求的异常比例或慢调用比例,如果超出阈值则会熔断该业务,则拦截该接口的请求。熔断期间,所有请求快速失败,全都走fallback逻辑。

服务保护技术

Sentinel

Sentinel 是一款面向分布式、多语言异构化服务架构的流量治理组件。它主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。


快速入门

请求限流

线程隔离

Fallback

服务熔断

拒绝请求故障服务

九.分布式事务

Seata

Seata 是一款在微服务架构下提供高性能和简单易用的分布式事务服务的开源项目。它致力于解决分布式系统中的事务一致性问题,支持多种事务模式和微服务框架。

官网地址:http://seata.io/

分布式事务解决思路

各个子事务之间必须能感知到彼此的事务状态,才能保持一致

Seata架构

部署TC服务

1.准备数据库表

2.准备配置文件

3.Docker部署

微服务集成Seata

XA模式

优点: 事务的强一致性,确保的事务的acid

缺点:一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差

AT模式

优点:性能较好

缺点:短暂不一致,最终一致

四.RabbitMQ

五.Elasticsearch

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01 相机标定与相机模型介绍

学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +

如何在 Postman 中正确设置 Session 以维持用户状态?

在 Postman 里面设置有 session 的请求。如果你还不知道什么是 session,那么请看这里—— session 是一种记录客户端和服务器之间状态的机制,用于保持用户的登录状态或者其他数据,从而让用户在不同页面之间保持一致的体验。 Postman 设置带 …

免费使用!OpenAI 全量开放 GPT-4o 图像生成能力!

2025年3月26日,OpenAI正式推出GPT-4o原生图像生成功能,这一更新不仅标志着多模态AI技术的重大突破,更引发了全球AI厂商的激烈竞争。从免费用户到企业开发者,从创意设计到科学可视化,GPT-4o正在重塑图像生成的边界。本文…

【JavaScript】八、对象

文章目录 1、对象的声明2、对象的使用3、对象中的方法4、遍历对象5、内置对象Math 1、对象的声明 一种数据类型,使用typeof查看类型,结果是object可以详细的描述描述某个事物 声明语法: // 多用花括号形式声明 // 比如声明一个person对象 …

C++指针(五)完结篇

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 前言 相关文章:C指针(一)、C指针(二)、C指针(三)、C指针(四)万字图文详解! 本篇博客是介…

DataGear 企业版 1.4.0 发布,数据可视化分析平台

DataGear 企业版 1.4.0 已发布,欢迎体验! http://datagear.tech/pro/ 企业版 1.4.0 看板可视编辑模式新增了插入看板表单/面板布局、编辑图表联动、复制/粘贴、撤销/恢复等功能,具体更新内容如下: 新增:看板可视编辑…

windows第十八章 菜单、工具栏、状态栏

文章目录 创建框架窗口菜单菜单的风格通过资源创建菜单菜单的各种使用通过代码创建菜单在鼠标位置右键弹出菜单 CMenu常用函数介绍工具栏方式一,从资源创建工具栏方式二,代码创建 状态栏状态栏基础创建状态栏 创建框架窗口 手动创建一个空项目&#xff…

局域网共享失败?打印机/文件夹共享工具

很多时候,在办公或家庭环境中,我们需要进行打印机和文件夹的共享,以便更高效地协作和处理文件。然而,寻找对应版本的共享设置或是不想花费太多时间去进行复杂的电脑设置,总是让人感到头疼。今天,我要向大家…

C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因

文章目录 原因分析解决方案1. 检查记录集是否为空2. 安全调用COM方法3.进行异常捕获4. 替代方案:手动处理空数据 总结 在C中使用CopyFromRecordset将空记录集(0条记录)复制到Excel时崩溃的原因及解决方法如下: 原因分析 空记录集…

torchvision中数据集的使用

1、torchvision及其数据集的介绍 1.1 torchvision介绍 torchvision 是 PyTorch 的一个官方库,专门用于计算机视觉任务。它提供了以下核心功能: 预训练模型:如 ResNet、VGG、EfficientNet 等。数据集:内置常用视觉数据集&#xf…

d2025328

一、sql-判断三角形 610. 判断三角形 - 力扣&#xff08;LeetCode&#xff09; 用一下if加上判断条件 select x,y,z,if(xy > z and xz > y and yz > x and x-y < z and x-z < y and y-z < x,Yes,No) as triangle from Triangle 二、按照分类统计薪水 190…

C++20新特性:std::assume_aligned详解

文章目录 一、概述二、函数定义与语法三、使用方法与注意事项1. 使用方法2. 注意事项 四、性能优化原理五、实际应用场景六、编译器支持情况七、总结 一、概述 C20引入了std::assume_aligned&#xff0c;这是一个非常实用的特性&#xff0c;用于告知编译器某个指针所指向的对象…

洛谷P1706 全排列题解

P1706 全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列&#xff0c;即 n n n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重复的…

yum install 报错(CentOS换源):

yum instally yum utils device mapper persistent-data lvm2 报错&#xff1a; 排查错误原因&#xff1a;centos7 系统停止维护了 解决方案&#xff1a;换源&#xff08;更换操作系统&#xff09; //1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-…

C语言学习笔记(抱佛脚版)

毕业一年&#xff0c;发现记性是真的差&#xff0c;每次想起之前的知识总是想不全&#xff0c;看别人写的资料也懵懵懂懂。于是我索性自己再学一遍&#xff0c;并且记录一下。希望对你们也有所帮助。 正片开始&#xff01; 前面的什么if for都不难理解&#xff0c;嵌套的话也…

攻破tensorflow,勇创最佳agent(2)---损失(loss) 准确率(accuracy)问题

实战播: 怎么判定一个模型好不好,你设置的值对不对? 需要再看几个值: 例如: model Sequential()for units in model_structure:model.add(Dense(units, activationrelu))model.add(Dropout(train_config.get(dropout_rate, 0.3)))model.add(Dense(1, activationsigmoid)) 他…

Docker-Volume数据卷详讲

Docker数据卷-Volume 一&#xff1a;Volume是什么&#xff0c;用来做什么的 当删除docker容器时&#xff0c;容器内部的文件就会跟随容器所销毁&#xff0c;在生产环境中我们需要将数据持久化保存&#xff0c;就催生了将容器内部的数据保存在宿主机的需求&#xff0c;volume …

使用Selenium和lxml库搜房网爬取某地区房屋信息(python、pycharm爬虫)

一、地址&#xff1a; url "https://zb.newhouse.fang.com/house/s/b91" # 第一页的 URL 但是这个爬虫我不知道为啥总是翻不了页数&#xff0c;请帮忙修改一下~ 二、用到的知识点以及代码详解&#xff1a; 这段代码是一个使用Selenium和lxml库实现的网页爬虫&a…

ai画图comfyUI 精准定位gligen。允许指定图像中多个对象的位置和大小

基础功能下&#xff0c;outpainting是内容填充&#xff0c;拉近拉远镜头&#xff0c;自动填充旁边物体。嵌入模型也需要单独下载&#xff0c;演示完示例后推荐模型站有更直观效果介绍和用法。选中精确定位。看一眼坐标&#xff0c;直接默认出一张图。然后修改定位&#xff0c;和…

如何自动化同义词并使用我们的 Synonyms API 进行上传

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 LLM 来自动识别和生成同义词&#xff0c; 使术语可以通过程序方式加载到 Elasticsearch 同义词 API 中。 提高搜索结果的质量对于提供高效的用户体验至关重要。优化搜索的一种方法是通过同义词自动扩展查询词。这样可以更…