Skip to content

Commit 81422c6

Browse files
authored
Merge pull request Snailclimb#1357 from anaer/patch-16
Update RabbitMQ入门看这一篇就够了.md
2 parents 576e5df + 24f27e5 commit 81422c6

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,
3232
RabbitMQ 发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。RabbitMQ 的具体特点可以概括为以下几点:
3333

3434
- **可靠性:** RabbitMQ使用一些机制来保证消息的可靠性,如持久化、传输确认及发布确认等。
35-
- **灵活的路由:** 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。这个后面会在我们将 RabbitMQ 核心概念的时候详细介绍到。
35+
- **灵活的路由:** 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。这个后面会在我们讲 RabbitMQ 核心概念的时候详细介绍到。
3636
- **扩展性:** 多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
3737
- **高可用性:** 队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
3838
- **支持多种协议:** RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP、MQTT 等多种消息中间件协议。
@@ -85,7 +85,7 @@ Binding(绑定) 示意图:
8585

8686
**RabbitMQ** 中消息只能存储在 **队列** 中,这一点和 **Kafka** 这种消息中间件相反。Kafka 将消息存储在 **topic(主题)** 这个逻辑层面,而相对应的队列逻辑只是topic实际存储文件中的位移标识。 RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。
8787

88-
**多个消费者可以订阅同一个队列**,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,这样避免的消息被重复消费
88+
**多个消费者可以订阅同一个队列**,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,这样避免消息被重复消费
8989

9090
**RabbitMQ** 不支持队列层面的广播消费,如果有广播消费的需求,需要在其上进行二次开发,这样会很麻烦,不建议这样做。
9191

@@ -129,17 +129,17 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把
129129

130130
以上图为例:
131131

132-
- 路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queuel 和 Queue2;
132+
- 路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queue1 和 Queue2;
133133
- 路由键为 “com.hidden.client” 的消息只会路由到 Queue2 中;
134134
- 路由键为 “com.hidden.demo” 的消息只会路由到 Queue2 中;
135-
- 路由键为 “java.rabbitmq.demo” 的消息只会路由到Queuel中
135+
- 路由键为 “java.rabbitmq.demo” 的消息只会路由到 Queue1 中
136136
- 路由键为 “java.util.concurrent” 的消息将会被丢弃或者返回给生产者(需要设置 mandatory 参数),因为它没有匹配任何路由键。
137137

138138
##### ④ headers(不推荐)
139139

140-
headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时制定一组键值对,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式)'对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
140+
headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时指定一组键值对,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式)对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
141141

142-
## 二 安装 RabbitMq
142+
## 二 安装 RabbitMQ
143143

144144
通过 Docker 安装非常方便,只需要几条命令就好了,我这里是只说一下常规安装方法。
145145

@@ -279,23 +279,23 @@ rabbitmq-plugins enable rabbitmq_management
279279
chkconfig rabbitmq-server on
280280
```
281281

282-
**4. 启动服务**
282+
**5. 启动服务**
283283

284284
```shell
285285
service rabbitmq-server start
286286
```
287287

288-
**5. 查看服务状态**
288+
**6. 查看服务状态**
289289

290290
```shell
291291
service rabbitmq-server status
292292
```
293293

294-
**6. 访问 RabbitMQ 控制台**
294+
**7. 访问 RabbitMQ 控制台**
295295

296296
浏览器访问:http://你的ip地址:15672/
297297

298-
默认用户名和密码: guest/guest;但是需要注意的是:guestuest用户只是被容许从localhost访问。官网文档描述如下:
298+
默认用户名和密码:guest/guest; 但是需要注意的是:guest用户只是被容许从localhost访问。官网文档描述如下:
299299

300300
```shell
301301
“guest” user can only connect via localhost

0 commit comments

Comments
 (0)