Skip to content

Commit f27b1f8

Browse files
committed
更新RabbitMQ核心知识总结
1 parent 6652a88 commit f27b1f8

File tree

3 files changed

+33
-21
lines changed

3 files changed

+33
-21
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110

111111
## RabbitMQ
112112

113-
1. [RabbitMQ总结](中间件/RabbitMQ.md) (必看 :+1:)
113+
1. [RabbitMQ核心知识总结](中间件/RabbitMQ.md) (必看 :+1:)
114114
2. [死信队列](中间件/死信队列.md)
115115

116116
# 设计模式

中间件/RabbitMQ.md

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
- [消息丢失](#%E6%B6%88%E6%81%AF%E4%B8%A2%E5%A4%B1)
1515
- [生产者确认机制](#%E7%94%9F%E4%BA%A7%E8%80%85%E7%A1%AE%E8%AE%A4%E6%9C%BA%E5%88%B6)
1616
- [路由不可达消息](#%E8%B7%AF%E7%94%B1%E4%B8%8D%E5%8F%AF%E8%BE%BE%E6%B6%88%E6%81%AF)
17-
- [Return消息机制](#return%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6)
18-
- [备份交换机](#%E5%A4%87%E4%BB%BD%E4%BA%A4%E6%8D%A2%E6%9C%BA)
17+
- [Return消息机制](#return%E6%B6%88%E6%81%AF%E6%9C%BA%E5%88%B6)
18+
- [备份交换机](#%E5%A4%87%E4%BB%BD%E4%BA%A4%E6%8D%A2%E6%9C%BA)
1919
- [消费者手动消息确认](#%E6%B6%88%E8%B4%B9%E8%80%85%E6%89%8B%E5%8A%A8%E6%B6%88%E6%81%AF%E7%A1%AE%E8%AE%A4)
2020
- [持久化](#%E6%8C%81%E4%B9%85%E5%8C%96)
2121
- [镜像队列](#%E9%95%9C%E5%83%8F%E9%98%9F%E5%88%97)
@@ -29,11 +29,23 @@
2929

3030
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
3131

32+
> 本文已经收录到github仓库,此仓库用于分享Java相关知识总结,包括Java基础、MySQL、Spring Boot、MyBatis、Redis、RabbitMQ、计算机网络、数据结构与算法等等,欢迎大家提pr和star!
33+
>
34+
> github地址:https://github.com/Tyson0314/Java-learning
35+
>
36+
> 如果github访问不了,可以访问gitee仓库。
37+
>
38+
> gitee地址:https://gitee.com/tysondai/Java-learning
39+
40+
文章目录:
41+
42+
![](https://gitee.com/tysondai/img/raw/master/image-20210914234334988.png)
43+
3244
# 简介
3345

3446
RabbitMQ是一个由erlang开发的消息队列。消息队列用于应用间的异步协作。
3547

36-
![image-20200718104019614](../img/rabbitmq.png)
48+
![](https://gitee.com/tysondai/img/raw/master/rabbitmq.png)
3749

3850
## 基本概念
3951

@@ -82,19 +94,19 @@ Exchange规则。
8294

8395
direct交换机会将消息路由到binding key 和 routing key完全匹配的队列中。它是完全匹配、单播的模式。
8496

85-
![](../img/rabbitmq-direct.png)
97+
![](https://gitee.com/tysondai/img/raw/master/rabbitmq-direct.png)
8698

8799
## fanout
88100

89101
所有发到 fanout 类型交换机的消息都会路由到所有与该交换机绑定的队列上去。fanout 类型转发消息是最快的。
90102

91-
![](../img/rabbitmq-fanout.png)
103+
![](https://gitee.com/tysondai/img/raw/master/rabbitmq-fanout.png)
92104

93105
## topic
94106

95107
topic交换机使用routing key和binding key进行模糊匹配,匹配成功则将消息发送到相应的队列。routing key和binding key都是句点号“. ”分隔的字符串,binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“\*”用于匹配一个单词,“#”用于匹配多个单词。
96108

97-
![](../img/rabbitmq-topic.png)
109+
![](https://gitee.com/tysondai/img/raw/master/rabbitmq-topic.png)
98110

99111
## headers
100112

@@ -147,7 +159,7 @@ rabbitTemplate.setConfirmCallback(confirmCallback);
147159

148160
对于不可路由的消息,有两种处理方式:Return消息机制和备份交换机。
149161

150-
## Return消息机制
162+
### Return消息机制
151163

152164
Return消息机制提供了回调函数 ReturnCallback,当消息从交换机路由到Queue失败才会回调这个方法。需要将`mandatory` 设置为 `true` ,才能监听到路由不可达的消息。
153165

@@ -169,7 +181,7 @@ rabbitTemplate.setReturnCallback(returnCallback);
169181

170182
当消息从交换机路由到Queue失败时,会返回 `return exchange: , routingKey: MAIL, replyCode: 312, replyText: NO_ROUTE`
171183

172-
## 备份交换机
184+
### 备份交换机
173185

174186
备份交换机alternate-exchange 是一个普通的exchange,当你发送消息到对应的exchange时,没有匹配到queue,就会自动转移到备份交换机对应的queue,这样消息就不会丢失。
175187

@@ -399,7 +411,7 @@ channel.basicAck(response.getEnvelope().getDeliveryTag(),false);
399411

400412
## 消息过期时间
401413

402-
在生产端发送消息的时候可以给消息设置过期时间,单位为毫秒(ms)
414+
在生产端发送消息的时候可以给消息设置过期时间,单位为毫秒(ms)
403415

404416
```java
405417
Message msg = new Message("tyson".getBytes(), mp);
@@ -418,4 +430,14 @@ msg.getMessageProperties().setExpiration("3000");
418430

419431
[RabbitMQ发送邮件代码](https://zhuanlan.zhihu.com/p/145908317)
420432

421-
[线上rabbitmq问题](https://juejin.im/post/6844904088212094983#heading-0)
433+
[线上rabbitmq问题](https://juejin.im/post/6844904088212094983#heading-0)
434+
435+
436+
437+
> 最后给大家分享一个github仓库,上面放了**200多本经典的计算机书籍**,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
438+
>
439+
> github地址:https://github.com/Tyson0314/java-books
440+
>
441+
> 如果github访问不了,可以访问gitee仓库。
442+
>
443+
> gitee地址:https://gitee.com/tysondai/java-books

中间件/死信队列.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
2-
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
3-
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
4-
5-
- [](#)
6-
7-
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
8-
91
死信队列:消费失败的消息存放的队列。消息消费失败的原因:
102

113
- 消息被拒绝并且消息没有重新入队(requeue=false)
@@ -123,5 +115,3 @@ public class DeadListener {
123115
```
124116

125117
当普通队列中有死信时,RabbitMQ 就会自动的将这个消息重新发布到设置的死信交换机去,然后被路由到死信队列。可以监听死信队列中的消息做相应的处理。
126-
127-
#

0 commit comments

Comments
 (0)