RabbitMQ消息队列(一)简单介绍

来源:互联网 发布:java多线程实现同步 编辑:程序博客网 时间:2024/05/23 12:51

RabbitMQ的官网是http://www.rabbitmq.com

解决问题

  1. 维持信息的发送者和接收者之间的链接。
  2. 降低发送者和接收者间的耦合。
  3. 让Priority高的接收者先接收到数据。
  4. 有效均衡接收者的负载。
  5. 有效的将数据发送到相关接收者。
  6. 可扩展性。
  7. 保证接收者接收到完整正确的数据

运行原理

原理简译

RabbitMQ运行原理图

Client A & B:

也叫Producer,数据的发送方。
一个Message有两个部分:
payload(有效载荷)和label(标签)。
payload就是传输的数据。
label是exchange的名字或者是一个tag,它描述了payload,RabbitMQ也是通过label决定吧这个Message发给哪个Consumer。

Client 1, 2, 3:

也叫Consumer,数据的接收方。
把queue比作一个有名字的邮箱。当有Message到达某个邮箱后,RabbitMQ把它发送给它的某个订阅者即Consumer。

对于一个数据从Producer到Consumer的正确传递,还有三个概念需要明确:
exchange, queue, bindings

   Exchanges are where producers publish their messages.    Queuesare where the messages end up and are received by consumers    Bindings are how the messages get routed from the exchange to particular queues.

Connection:就是一个TCP的链接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。

Channel:虚拟链接。建立在TCP连接中。数据流动都是在CHannel进行的。

对于OS来说,建立和关闭TCP连接是有代价的,频繁的简历关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。

确认正确传递

使用ack确认Message的正确传递
默认情况下,如果Message已经被某个Consumer正确的接收到了,那么该Message就会被从queue中一处。当大也可以让同一个Message发送到很多的Consumer。

如果一个queue没有被任何的Consumer订阅,那么如果这个quere有数据到达,这个数据会被cache,不会丢弃。当有Consumer时,这个数据会被立即发送到这个Consumer,被Consumer正确接收时。这个数据就被从quere中移除。
通过ack确认Consumer是否正确收到。每个Message都要被acknowledged(确认)。在Consumer处理完成数据后发送ack。
通过reject 让message发送给下一个consumer或立即从queue中移除。
Consumer和producer都可以通过queue.declare创建queue.
Producer 的Message进入了Exchange。通过routing keys ,RabbitMQ会找到对应的queue.

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 从化汽车站 从化客运站 从化溪头村 从化地铁 从化温泉镇 从化房价 从化大学 从化响水峡 从化南平村 从化邮编 从化在哪里 从化楼盘 从化兼职网 广州到从化 从化论坛 从化荔枝 从化人才网 从化论坛网 从化到广州 从化旅行社 从化旅游网 从化租房网 广东从化 从化特产 从化资讯网 从化酒店 从化周边游 从化住宿 从化二天游 从化亲子游 从化游玩 从化翡翠城 从化的酒店 从化景区 从化两天游 从化2日游 从化2天游 从化渡假村 从化流溪河 广州市从化 从化碧泉