RabbitMQ的实现

1)routing Key 将交换机(exchagne)与队列(queue)绑定到一起,交换机就是一个由绑定构成的路由表;

2)AMQP主要组件:交换机与队列 。 如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型。

3)消息队列和交换机都有可能是持久 临时的,或者是自动删除的。消息队列可以一对多。 

4)交换机的类型:

direct:精确匹配路由关键字。构成点对点的序列。

fanout:交换机上的消息不管路由是什么将消息发送给多个与其绑定的队列;

topic:通配符匹配,浪费cpu。

header:

    RabbitMQ的实现_第1张图片

5)常用的操作流程:

(1)消费者创建消息队列 

(2)消费者定义消息队列 

(3)消费者定义特定类型的交换机 

(4)消费者设定绑定规则 

(5)等待消息 

(6)生产者创建消息 

(7)生产者将消息投递至信息通道中 

(8)交换机获取消息 

(9)消费者获取并处理消息,并发送反馈 

(10)结束,关闭通道和连接

6)durable的作用:队列和交换机有一个创建时候指定的标志durable。durable的唯一含义就是具有这个标志的队列和交换机会在重启之后重新建立;

7)new AMQPMessage($data, array('delivery_mode' => 2)),表示消息持久化;1表示消息非持久化;

8)消息队列运用的场景:双十一的时候用户秒杀商品是时控制一定的人数。

过程:将用户的订单放入一个消息队列中,设置消息队列的上限,若超过上线则直接丢弃;

9)公平分发:

通过basic.qos方法设置prefetch_count=1,这样RabbitMQ就会使得每个Consumer在同一个时间点最多处理一个Message,换句话说,在接收到该 Consumer的ack前,它不会将新的Message分发给它

channel.basic_qos(prefetch_count=1)

10)RabbitMQ使用ProtoBuf序列化消息,它可作为RabbitMQ的Message的数据格式进行传输,由于是结构化的数据,这样就极大的方便了Consumer的数据高效处理,当然也可以使用XML,与XML相比,ProtoBuf有以下优势: 

1.简单 

2.size小了3-10倍 

3.速度快了20-100倍 

4.易于编程 

6.减少了语义的歧义. 

,ProtoBuf具有速度和空间的优势,使得它现在应用非常广泛。

各参数之间的逻辑关系:

ConnectionFactory:与RabbitMQ服务器连接的管理器

Connection:与RabbitMQ服务器的连接

Channel:与Exchange的连接

Exchange:接受消息提供者(生产者)的消息,并根据消息的RoutingKey和Exchange绑定的BindingKey分配消息

Queue:存储消息接收者(消费者)的消息

RoutingKey:指定当前消息被谁接受

BindingKey:指定当前Exchange下,什么样的RoutingKey会被下派到当前绑定的Queue中

RabbitMQ的实现_第2张图片

具体的实现参考博文:https://blog.csdn.net/u014071426/article/details/53649226

 

 

 

你可能感兴趣的:(MQ)