1.rabbitMQ模型架构
Producer:生产者,投递消息的一方。即ClientA和ClientB
生产者创建消息,发布到rabbitMQ。消息一般包括消息体和标签。
Consumer:消费者,接受消息的一方。即为Client1,2,3。
消费者连接到rabbitMQ服务器,并订阅到队列上。当消费者消费一条消息时,只消费消息的消息体。存入到队列中的消息也只有消息体,消费者并不知道生产者是谁。
Broker:消息中间件的服务节点
整个流程:
生产者将业务数据封装成消息
生产者将消息发送到Broker(Basic.publish)。
消费者订阅并接收消息(Basic.Get或Basic.consume), 经过可能的解包处理得到原始数据。之后再进行业务处理逻辑
业务处理逻辑不一定需要和接受消息的逻辑使用同一个线程。
消费者进程可以使用一个线程去接收消息,存入到内存中,比如BlockQueue。
业务处理逻辑使用另外一个线程从内存中读取数据。
2.队列
Queue:队列,是RabbitMQ的内部对象,用于存储消息。
RabbitMQ中的消息只能存储在队列中,消费者从队列中获取消息并消费。
多个消费者可以订阅到同一个队列,但是队列中的消息并不会广播,而是轮询给绑定的每一个消费者。
3.交换器、路由键、绑定
交换器:Exchange,生产者将消息发送到交换器,由交换器将消息路由到一个或者多个队列中。
路由键:Rountingkey,生产者将消息发送到交换器的时候,通常会指定一个RountingKey,用来指定消息的路由规则。
绑定:binding,RabbitMQ中通过绑定将交换器和队列关联起来
生产者将消息发送到交换器的时候,需要指定一个RountingKey。队列和交换器绑定的时候,需要一个BindingKey。当RountingKey和BindingKey相匹配时,消息才会传送到指定的队列。但是fanout类型的交换器(广播)会无视BindingKey,而是广播发送到绑定到它自己所有队列中。
4.交换器类型
fanout
广播类型,它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
direct
它会把消息路由到那些RoutingKey和BindingKey完全匹配的队列中。
topic
相对于direct增加了*,#用于模糊查询。
网友评论