auto commit

This commit is contained in:
CyC2018
2020-11-17 00:32:18 +08:00
parent f5ad47b470
commit 7e61fc1360
380 changed files with 2371 additions and 46715 deletions

View File

@ -1,27 +1,22 @@
# 消息队列
<!-- GFM-TOC -->
* [消息模型](#消息模型)
* [点对点](#点对点)
* [发布/订阅](#发布订阅)
* [使用场景](#二使用场景)
* [异步处理](#异步处理)
* [流量削锋](#流量削锋)
* [应用解耦](#应用解耦)
* [可靠性](#三可靠性)
* [发送端的可靠性](#发送端的可靠性)
* [接收端的可靠性](#接收端的可靠性)
* [参考资料](#参考资料)
* [消息队列](#消息队列)
* [消息模型](#一消息模型)
* [使用场景](#二使用场景)
* [可靠性](#三可靠性)
* [参考资料](#参考资料)
<!-- GFM-TOC -->
# 消息模型
## 消息模型
## 点对点
### 点对点
消息生产者向消息队列中发送了一个消息之后只能被一个消费者消费一次
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191212011250613.png"/> </div><br>
## 发布/订阅
### 发布/订阅
消息生产者向频道发送一个消息之后多个消费者可以从该频道订阅到这条消息并消费
@ -34,9 +29,9 @@
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/image-20191212011747967.png"/> </div><br>
# 使用场景
## 使用场景
## 异步处理
### 异步处理
发送者将消息发送给消息队列之后不需要同步等待消息接收者处理完毕而是立即返回进行其它操作消息接收者从消息队列中订阅消息之后异步处理
@ -44,27 +39,27 @@
只有在业务流程允许异步处理的情况下才能这么做例如上面的注册流程中如果要求用户对验证邮件进行点击之后才能完成注册的话就不能再使用消息队列
## 流量削锋
### 流量削锋
在高并发的场景下如果短时间有大量的请求到达会压垮服务器
可以将请求发送到消息队列中服务器按照其处理能力从消息队列中订阅消息进行处理
## 应用解耦
### 应用解耦
如果模块之间不直接进行调用模块之间耦合度就会很低那么修改一个模块或者新增一个模块对其它模块的影响会很小从而实现可扩展性
通过使用消息队列一个模块只需要向消息队列中发送消息其它模块可以选择性地从消息队列中订阅消息从而完成调用
# 可靠性
## 可靠性
## 发送端的可靠性
### 发送端的可靠性
发送端完成操作后一定能将消息成功发送到消息队列中
实现方法在本地数据库建一张消息表将消息数据与业务数据保存在同一数据库实例里这样就可以利用本地数据库的事务机制事务提交成功后将消息表中的消息转移到消息队列中若转移消息成功则删除消息表中的数据否则继续重传
## 接收端的可靠性
### 接收端的可靠性
接收端能够从消息队列成功消费一次消息
@ -73,14 +68,7 @@
- 保证接收端处理消息的业务逻辑具有幂等性只要具有幂等性那么消费多少次消息最后处理的结果都是一样的
- 保证消息具有唯一编号并使用一张日志表来记录已经消费的消息编号
# 参考资料
## 参考资料
- [Observer vs Pub-Sub](http://developers-club.com/posts/270339/)
- [消息队列中点对点与发布订阅区别](https://blog.csdn.net/lizhitao/article/details/47723105)
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>