Skip to content

Commit 14eb06e

Browse files
committed
'增加rabbitmq'
1 parent 2c4ecd5 commit 14eb06e

9 files changed

+92
-0
lines changed

MQ/images/20140220173559828

131 KB
Binary file not shown.

MQ/images/20161103174653291.jpg

3 KB
Loading

MQ/images/20161103182929513.jpg

3.21 KB
Loading

MQ/images/20161103182938987.jpg

1.14 KB
Loading
21.5 KB
Loading
18.4 KB
Loading
53.2 KB
Loading

MQ/images/v63YbyA.png

22.2 KB
Loading

MQ/rabbitmq.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
## RabbitMQ 消息队列
2+
3+
> RabbitMQ是流行的开源消息队列系统,用erlang语言开发,完整的实现了AMPQ(高级消息队列协议)
4+
5+
## AMQP协议
6+
7+
> AMQP,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全
8+
9+
## 系统架构
10+
11+
12+
13+
![](images/20140220173559828)
14+
消息队列的使用过程大概如下:
15+
16+
(1)客户端连接到消息队列服务器,打开一个channel。
17+
(2)客户端声明一个exchange,并设置相关属性。
18+
(3)客户端声明一个queue,并设置相关属性。
19+
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
20+
(5)客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里
21+
22+
## Rabbitmq中几个概念的解释
23+
24+
- **生产者 **
25+
26+
![](images/20161103174653291.jpg)
27+
28+
生产者就是产生消息并向RabbitMq队列发送消息
29+
30+
- **消费者**
31+
32+
![](images/20161103182929513.jpg)
33+
34+
等待RabbitMq消息到来并处理消息
35+
36+
- **Queue**(队列)
37+
38+
![](images/20161103182938987.jpg)
39+
Queue(队列), 依存于RabbitMQ内部,消息存在队列中。它指定消息按什么规则,路由到哪个队列
40+
41+
- **交换器(exchange)**
42+
43+
![](http://ostest.qiniudn.com/wordpress/wp-content/uploads/2014/02/2014-2-21-9-51-03.png)
44+
45+
生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个或多个Queue中.它指定消息按什么规则,路由到哪个队列
46+
47+
- **binding 绑定**
48+
49+
![](http://ostest.qiniudn.com/wordpress/wp-content/uploads/2014/02/2014-2-21-9-52-46.png)
50+
51+
它的作用就是把exchange和queue按照路由规则绑定起来
52+
53+
- routing key 路由关键字
54+
55+
exchange根据这个关键字将消息投放到对应的队列中去。
56+
57+
- **Binding key**
58+
59+
在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;生产者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key相匹配时,消息将会被路由到对应的Queue中
60+
61+
- **虚拟主机**
62+
63+
一个虚拟主机持有一组交换机、队列和绑定。隔离不同的队列和用户的权限管理。
64+
65+
![](images/v63YbyA.png)
66+
67+
- **channel 消息通道**
68+
69+
在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
70+
71+
-Exchange type 交换模式
72+
73+
RabbitMQ提供了四种Exchange模式:fanout,direct,topic,header
74+
75+
一、 **Fanout**
76+
77+
![](images/306976-20160728104237622-1486261669.png)
78+
79+
它采取广播模式,消息进来时,将会被投递到与改交换机绑定的所有队列中。
80+
所有发送到Fanout Exchange的消息都会被转发到与该Exchange 绑定(Binding)的所有Queue上.Fanout Exchange 不需要处理RouteKey 。只需要简单的将队列绑定到exchange
81+
82+
二、**Direct **
83+
84+
![](images/306976-20160728104255372-2049742072.png)
85+
86+
Direct模式,消息传递时,RouteKey必须完全匹配,才会被队列接收,否则该消息会被抛弃。
87+
88+
三. **Topic **
89+
90+
![](images/306976-20160728104309934-1385658660.png)
91+
92+
Exchange 将RouteKey 和某Topic 进行模糊匹配。此时队列需要绑定一个Topic。可以使用通配符进行模糊匹配,符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“log.#”能够匹配到“log.info.oa”,但是“log.*” 只会匹配到“log.error

0 commit comments

Comments
 (0)