Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
cc_、
JavaGuide
提交
81422c63
J
JavaGuide
项目概览
cc_、
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
30
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
81422c63
编写于
9月 02, 2021
作者:
G
Guide哥
提交者:
GitHub
9月 02, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1357 from anaer/patch-16
Update RabbitMQ入门看这一篇就够了.md
上级
576e5df6
24f27e53
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
10 addition
and
10 deletion
+10
-10
docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md
...ign/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md
+10
-10
未找到文件。
docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md
浏览文件 @
81422c63
...
...
@@ -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” 的消息会同时路由到 Queue
l
和 Queue2;
-
路由键为 “com.rabbitmq.client” 的消息会同时路由到 Queue
1
和 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 类型的交换器性能会很差,而且也不实用,基本上不会看到它的存在。
## 二 安装 RabbitM
q
## 二 安装 RabbitM
Q
通过 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;但是需要注意的是:guest
uest用户只是被容许从localhost访问。官网文档描述如下:
默认用户名和密码:
guest/guest; 但是需要注意的是:g
uest用户只是被容许从localhost访问。官网文档描述如下:
```
shell
“guest” user can only connect via localhost
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录