Hello,你好呀~
你好呀!网站还在建设中…欢迎以后来玩…
有很多的笔记整理…TODO:肝…
MyBatis-Plus模板生成🌸[新版]VS[旧版]
MyBatis-Plus模板生成🌸[新版]VS[旧版]
遇到的问题当我们要创建一个新项目时,根据MVC/三层架构的思想,我们要分层开发,需要根据数据库表创建对应的数据访问层、业务实现层、Web访问层(控制层),当然,还需要对应的对应的实体类进行封装。
在国内的话,MyBatis-Plus用的比较多,以User表举例的话,那么在初始话创建的时候:
entity -> User实体类 -> @TableName指定表 @TableId指定主键信息 等
mapper -> UserMapper -> public interface UserMapper extends BaseMapper {}
service -> IUserServer -> public interface IUserService extends IService {}
impl -> UserService ->
@Servicepublic class UserServiceImpl extends ServiceImpl<UserM ...
🌸微服务第六篇💌高级MQ🌸
🌸我的SpringCloud笔记💌高级MQ🌸
MQ用起来很简单,效果也很好,但是,在使用中有很多坑,说不定哪天别人给你写的💌就在阴差阳错中丢失了….
为此,要对MQ进行深入的了解,🆗,为了保证💌的安全……学习好MQ高级是很有必要的!
消息队列在使用过程中,面临着很多实际问题需要思考:
消息可靠性先看一下,交换机模式下,💌是如何到你手上的…
消息从发送,到消费者接收,会经理多个过程:
其中的每一步都可能导致消息丢失,常见的丢失原因包括:
发送时丢失:
生产者发送的消息未送达exchange
消息到达exchange后未到达queue
MQ宕机,queue将消息丢失
consumer接收到消息后未消费就宕机
针对这些问题,RabbitMQ分别给出了解决方案:
graph LR生产者确认机制 --> 解决解决 --> 发送时丢失问题
graph LRMQ持久化 --> 解决解决 --> MQ宕机导致queue将消息丢失
graph LR消费者确认机制 --> 解决解决 --> consumer接收到消息后未消费就宕机
...
🌸微服务第五篇💸分布式事务🌸
🌸我的SpringCloud笔记💸分布式事务🌸
💸简述本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则:
分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:
跨数据源的分布式事务
跨服务的分布式事务
综合情况
在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成。例如电商行业中比较常见的下单付款案例,包括下面几个行为:
创建新订单
扣减商品库存
从用户账户余额扣除金额
完成上面的操作需要访问三个不同的微服务和三个不同的数据库。
订单的创建、库存的扣减、账户扣款在每一个服务和数据库内是一个本地事务,可以保证ACID原则。
但是当我们把三件事情看做一个”业务”,要满足保证“业务”的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,这就是分布式系统下的事务了。
此时ACID难以满足,这是分布式事务要解决的问题。
分布式服务的事务问题
在分布式系统下,一个业务跨越多个服务或数据源,每个服务都是一个分支事务,要保证所有分支事务最终状态一致 ,这样的事务 ...
🌸微服务第四篇⛑️微服务保护🌸
🌸我的SpringCloud笔记⛑️微服务保护🌸
雪崩问题及解决方案
⛑️雪崩问题微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。
如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不受影响。
但是,依赖服务I的业务请求被阻塞,用户不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞:
服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。
那么,依赖于当前服务的其它服务随着时间的推移,最终也都会变的不可用,形成级联失败,雪崩就发生了:
解决方案:解决雪崩问题的常见方式有四种:
超时处理
仓璧模式
断路器
限流
一、超时处理•超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
二、仓壁模式方案2:仓壁模式
仓壁模式来源于船舱的设计:
船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进入,将故障控制在一定范围内, ...
🌸微服务第三篇🧬高级搜索ES🌸
🧬🌸我的SpringCloud笔记🧬高级搜索ES🌸
🧬高级搜索ES
🧬简单介绍什么是elasticsearch
**elasticsearch的发展 **
Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发 。
官网地址:https://lucene.apache.org/
Lucene的优势:
易扩展
高性能(基于倒排索引)
Lucene的缺点:
只限于Java语言开发
学习曲线陡峭
不支持水平扩展
2004年Shay Banon基于Lucene开发了Compass
2010年Shay Banon 重写了Compass,取名为Elasticsearch。
官网地址: https://www.elastic.co/cn/
目前最新的版本是:7.12.1 相比与lucene,elasticsearch具备下列优势:
支持分布式,可水平扩展
提供Restful接口,可被任何语言调用
倒排索引传统数据库(如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引:
e ...
🌸微服务第二篇📬消息队列🌸
🌸我的SpringCloud笔记📬消息队列🌸
📬消息队列MQ
同步和异步通讯微服务间通讯有同步和异步两种方式:
同步通讯:就像打电话,需要实时响应。
异步通讯:就像发邮件,不需要马上回复。
两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。
同步通讯我们之前学习的Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:
总结:
同步调用的优点:
时效性较强,可以立即得到结果
同步调用的问题:
耦合度高
性能和吞吐能力下降
有额外的资源消耗
有级联失败问题
异步通讯异步调用则可以避免上述问题:
我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。
在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。
订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。
为了解除事件发布 ...
🌸微服务第一篇🗂️基本组件🌸
🌸我的SpringCloud笔记🗂️基本组件🌸
🔍认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
单体架构的优缺点如下:
优点:
架构简单
部署成本低
缺点:
耦合度高(维护困难、升级困难)
分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
降低服务耦合
有利于服务升级和拓展
缺点:
服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
微服务微服务的架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立,独立部署和交付
面向服务:服务提供统一标准的接口,与语言和技术无关
隔离性强:服务 ...
我的ArchLinux
我的ArchLinux配置 && ArchLinux的使用文档
Arch Linux文档GitHub仓库
安装系统连接网络
iwctl # 进入交互式命令行device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0station wlan0 scan # 扫描网络station wlan0 get-networks # 列出所有 wifi 网络station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可exit # 连接成功后退出ping www.bilibili.com # 测试
设置时间
timedatectl set-ntp true # 将系统时间与网络时间进行同步timedatectl status # 检查服务状态
更换镜像源
vim /etc/pacman.d/mirrorlist
# 中国科学技术大学开源镜像站Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 清华大学开源软件镜像站Server ...
一些标签的语法使用
标签的使用隐藏答案我懒吗👻? ???
一点都不懒
语法:
{% hideInline content,display,bg,color %}
content: 文本內容
display: 按鈕顯示的文字(可選)
bg: 按鈕的背景顏色(可選)
color: 按鈕文字的顏色(可選)
实例代码:
我很懒? {% hideInline 懒......到......家......了......,查看答案,#FF7242,#fff %}
效果:我很懒? 查看答案
懒......到......家......了......
高亮文字 语法:
{% label text color %}
text 文字内容
color 颜色
演示:
臣亮言:{% label 先帝 %}創業未半,而{% label 中道崩殂 blue %}。今天下三分,{% label 益州疲敝 pink %},此誠{% label 危急存亡之秋 red %}也!然侍衞之臣 ...