@@ -31,7 +31,7 @@ RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、
31
31
32
32
下面再来看看图1—— RabbitMQ 的整体模型架构。
33
33
34
- ![ 图1-RabbitMQ 的整体模型架构] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /96388546.jpg )
34
+ ![ 图1-RabbitMQ 的整体模型架构] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /96388546.jpg )
35
35
36
36
下面我会一一介绍上图中的一些概念。
37
37
@@ -52,15 +52,15 @@ RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、
52
52
53
53
Exchange(交换器) 示意图如下:
54
54
55
- ![ Exchange(交换器) 示意图] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /24007899.jpg )
55
+ ![ Exchange(交换器) 示意图] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /24007899.jpg )
56
56
57
57
生产者将消息发给交换器的时候,一般会指定一个 ** RoutingKey(路由键)** ,用来指定这个消息的路由规则,而这个 ** RoutingKey 需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效** 。
58
58
59
59
RabbitMQ 中通过 ** Binding(绑定)** 将 ** Exchange(交换器)** 与 ** Queue(消息队列)** 关联起来,在绑定的时候一般会指定一个 ** BindingKey(绑定建)** ,这样 RabbitMQ 就知道如何正确将消息路由到队列了,如下图所示。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。Exchange 和 Queue 的绑定可以是多对多的关系。
60
60
61
61
Binding(绑定) 示意图:
62
62
63
- ![ Binding(绑定) 示意图] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /70553134.jpg )
63
+ ![ Binding(绑定) 示意图] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /70553134.jpg )
64
64
65
65
生产者将消息发送给交换器时,需要一个RoutingKey,当 BindingKey 和 RoutingKey 相匹配时,消息会被路由到对应的队列中。在绑定多个队列到同一个交换器的时候,这些绑定允许使用相同的 BindingKey。BindingKey 并不是在所有的情况下都生效,它依赖于交换器类型,比如fanout类型的交换器就会无视,而是将消息路由到所有绑定到该交换器的队列中。
66
66
@@ -80,7 +80,7 @@ Binding(绑定) 示意图:
80
80
81
81
下图展示了生产者将消息存入 RabbitMQ Broker,以及消费者从Broker中消费数据的整个流程。
82
82
83
- ![ 消息队列的运转过程] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /67952922.jpg )
83
+ ![ 消息队列的运转过程] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /67952922.jpg )
84
84
85
85
这样图1中的一些关于 RabbitMQ 的基本概念我们就介绍完毕了,下面再来介绍一下 ** Exchange Types(交换器类型)** 。
86
86
@@ -96,7 +96,7 @@ fanout 类型的Exchange路由规则非常简单,它会把所有发送到该Ex
96
96
97
97
direct 类型的Exchange路由规则也很简单,它会把消息路由到那些 Bindingkey 与 RoutingKey 完全匹配的 Queue 中。
98
98
99
- ![ direct 类型交换器] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /37008021.jpg )
99
+ ![ direct 类型交换器] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /37008021.jpg )
100
100
101
101
以上图为例,如果发送消息的时候设置路由键为“warning”,那么消息会路由到 Queue1 和 Queue2。如果在发送消息的时候设置路由键为"Info”或者"debug”,消息只会路由到Queue2。如果以其他的路由键发送消息,则消息不会路由到这两个队列中。
102
102
@@ -110,7 +110,7 @@ direct 类型常用在处理有优先级的任务,根据任务的优先级把
110
110
- BindingKey 和 RoutingKey 一样也是点号“.”分隔的字符串;
111
111
- BindingKey 中可以存在两种特殊字符串“\* ”和“#”,用于做模糊匹配,其中“\* ”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)。
112
112
113
- ![ topic 类型交换器] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-16 /73843.jpg )
113
+ ![ topic 类型交换器] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /73843.jpg )
114
114
115
115
以上图为例:
116
116
@@ -132,7 +132,7 @@ headers 类型的交换器不依赖于路由键的匹配规则来路由消息,
132
132
133
133
注意:在安装 RabbitMQ 的时候需要注意 RabbitMQ 和 Erlang 的版本关系,如果不注意的话会导致出错,两者对应关系如下:
134
134
135
- ![ RabbitMQ 和 Erlang 的版本关系] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/2019-3 /RabbitMQ-Erlang.png )
135
+ ![ RabbitMQ 和 Erlang 的版本关系] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /RabbitMQ-Erlang.png )
136
136
137
137
### 2.1 安装 erlang
138
138
@@ -196,7 +196,7 @@ make && make install
196
196
``` erlang
197
197
io :format (" hello world~n " , []).
198
198
```
199
- ![ 输出“hello world”] ( https://my-blog-to-use. oss-cn-beijing.aliyuncs.com/18-12-12 /49570541.jpg )
199
+ ![ 输出“hello world”] ( https://oss.javaguide.cn/github/javaguide/rabbitmq /49570541.jpg )
200
200
201
201
大功告成,我们的 erlang 已经安装完成。
202
202
@@ -304,6 +304,5 @@ Setting permissions for user "root" in vhost "/" ...
304
304
305
305
再次访问:http://你的ip地址:15672/ ,输入用户名和密码:root root
306
306
307
- ! [RabbitMQ控制台](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-12-12/45835332.jpg)
308
-
307
+ ! [RabbitMQ控制台](https://oss.javaguide.cn/github/javaguide/rabbitmq/45835332.jpg)
309
308
0 commit comments