@@ -32,7 +32,7 @@ RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,
32
32
RabbitMQ 发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。RabbitMQ 的具体特点可以概括为以下几点:
33
33
34
34
- ** 可靠性:** RabbitMQ使用一些机制来保证消息的可靠性,如持久化、传输确认及发布确认等。
35
- - ** 灵活的路由:** 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。这个后面会在我们将 RabbitMQ 核心概念的时候详细介绍到。
35
+ - ** 灵活的路由:** 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。这个后面会在我们讲 RabbitMQ 核心概念的时候详细介绍到。
36
36
- ** 扩展性:** 多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
37
37
- ** 高可用性:** 队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
38
38
- ** 支持多种协议:** RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP、MQTT 等多种消息中间件协议。
@@ -85,7 +85,7 @@ Binding(绑定) 示意图:
85
85
86
86
** RabbitMQ** 中消息只能存储在 ** 队列** 中,这一点和 ** Kafka** 这种消息中间件相反。Kafka 将消息存储在 ** topic(主题)** 这个逻辑层面,而相对应的队列逻辑只是topic实际存储文件中的位移标识。 RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。
87
87
88
- ** 多个消费者可以订阅同一个队列** ,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,这样避免的消息被重复消费 。
88
+ ** 多个消费者可以订阅同一个队列** ,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,这样避免消息被重复消费 。
89
89
90
90
** RabbitMQ** 不支持队列层面的广播消费,如果有广播消费的需求,需要在其上进行二次开发,这样会很麻烦,不建议这样做。
91
91
@@ -129,17 +129,17 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把
129
129
130
130
以上图为例:
131
131
132
- - 路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queuel 和 Queue2;
132
+ - 路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queue1 和 Queue2;
133
133
- 路由键为 “com.hidden.client” 的消息只会路由到 Queue2 中;
134
134
- 路由键为 “com.hidden.demo” 的消息只会路由到 Queue2 中;
135
- - 路由键为 “java.rabbitmq.demo” 的消息只会路由到Queuel中 ;
135
+ - 路由键为 “java.rabbitmq.demo” 的消息只会路由到 Queue1 中 ;
136
136
- 路由键为 “java.util.concurrent” 的消息将会被丢弃或者返回给生产者(需要设置 mandatory 参数),因为它没有匹配任何路由键。
137
137
138
138
##### ④ headers(不推荐)
139
139
140
- headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时制定一组键值对 ,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式)' 对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
140
+ headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时指定一组键值对 ,当发送消息到交换器时,RabbitMQ会获取到该消息的 headers(也是一个键值对的形式), 对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列。headers 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
141
141
142
- ## 二 安装 RabbitMq
142
+ ## 二 安装 RabbitMQ
143
143
144
144
通过 Docker 安装非常方便,只需要几条命令就好了,我这里是只说一下常规安装方法。
145
145
@@ -279,23 +279,23 @@ rabbitmq-plugins enable rabbitmq_management
279
279
chkconfig rabbitmq-server on
280
280
```
281
281
282
- ** 4 . 启动服务**
282
+ ** 5 . 启动服务**
283
283
284
284
``` shell
285
285
service rabbitmq-server start
286
286
```
287
287
288
- ** 5 . 查看服务状态**
288
+ ** 6 . 查看服务状态**
289
289
290
290
``` shell
291
291
service rabbitmq-server status
292
292
```
293
293
294
- ** 6 . 访问 RabbitMQ 控制台**
294
+ ** 7 . 访问 RabbitMQ 控制台**
295
295
296
296
浏览器访问:http://你的ip地址:15672/
297
297
298
- 默认用户名和密码: guest/guest;但是需要注意的是:guestuest用户只是被容许从localhost访问 。官网文档描述如下:
298
+ 默认用户名和密码:guest/guest; 但是需要注意的是:guest用户只是被容许从localhost访问 。官网文档描述如下:
299
299
300
300
``` shell
301
301
“guest” user can only connect via localhost
0 commit comments