rabbitmq学习笔记-----概念讲解
- mq的应用场景
对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信,mq就是用来实现各模块间通信的软件
- mq的几个重要的概念
- RabbitMQ Server:
RabbitMQisn’t a food truck, it’s a delivery service. 他的角色就是维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输
- Producer:
数据的发送方。createmessages and publish (send) them to a broker server (RabbitMQ).一个Message有两个部分:payload(发送的数据)和label(信息自带的标签,用来告诉RabbitMQ把这个信息发送到哪个Consumer)
- Consumer:
数据的接收方。Consumersattach to a broker server (RabbitMQ) and subscribe to a queue,把queue比作是一个有名字的邮箱。当有Message到达某个邮箱后,RabbitMQ把它发送给它的某个订阅者即Consumer,在这个Message中,只有payload,label已经被删掉了
- Exchanges :
Producer 发送消息到exchange
- Queues:
the messages end up and are received by consumers
- Bindings:
how the messages get routed from the exchange to particular queues
- Connection:
一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的,程序的起始处就是建立这个TCP连接
- Channels:
虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel
- ack机制
如果一个queue没被任何的Consumer Subscribe(订阅),那么,如果这个queue有数据到达,那么这个数据会被cache,不会被丢弃。当有Consumer时,这个数据会被立即发送到这个Consumer,这个数据被Consumer正确收到时,这个数据就被从queue中删除
什么是正确收到呢?通过ack。每个Message都要被acknowledged(确认,ack)。我们可以显示的在程序中去ack,也可以自动的ack。如果有数据没有被ack,那么:
RabbitMQ Server会把这个信息发送到下一个Consumer。
如果这个app有bug,忘记了ack,那么RabbitMQ Server不会再发送数据给它,因为Server认为这个Consumer处理能力有限。
ack的机制还可以起到限流的作用(Benefitto throttling):在Consumer处理完成数据后发送ack,甚至在额外的延时后发送ack,将有效的balance Consumer的load
比如我们可能会对某些数据进行merge,比如merge 4s内的数据,然后sleep 4s后再获取数据。特别是在监听系统的state,我们不希望所有的state实时的传递上去,而是希望有一定的延时。这样可以减少某些IO,而且终端用户也不会感觉到
- 谁应该负责创建queue呢
如果queue不存在,当然Consumer不会得到任何的Message。但是如果queue不存在,那么Producer Publish的Message会被丢弃。所以,还是为了数据不丢失,Consumer和Producer都try to create the queue!反正不管怎么样,这个接口都不会出问题。
queue对load balance的处理是完美的。对于多个Consumer来说,RabbitMQ 使用循环的方式(round-robin)的方式均衡的发送给不同的Consumer
-
Exchanges
Procuder Publish的Message进入了Exchange。接着通过“routing keys”, RabbitMQ会找到应该把这个Message放到哪个queue里。queue也是通过这个routing keys来做的绑定,有三种类型的Exchanges:direct, fanout,topic。后面讲解
-
Virtual hosts
每个virtual host本质上都是一个RabbitMQ Server,拥有它自己的queue,exchagne,和bings rule等等。这保证了你可以在多个不同的application中使用RabbitMQ
- 最后来一张软件的架构图
文章来源转载于:http://blog.csdn.net/anzhsoft/article/details/19563091

浙公网安备 33010602011771号