1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update RabbitMQ入门看这一篇就够了.md

typo
This commit is contained in:
anaer 2021-08-31 14:37:58 +08:00 committed by GitHub
parent 4189bbe647
commit 24f27e5366
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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