RabbitMQ消息模型

Rabbit MQ作为按照AMQP协议实现的老牌消息中间件,已经有将近十年的历史了。诞生于金融行业,现在作为企业级消息队列广泛用在各个领域。最近因为工作关系接触到了Rabbitmq,对其工作方式做了大致了解。

生产者连接到mq时,就可以指定virtual host,典型的url配置如下。

amqp://user:passwd@localhost:5672/test

test就是生产者连接时指定的virtual host,之后投递消息所使用exchange和queue,都位于此host下。

生产者将消息发送到mq之后,会首先经过exchange,由exchange决定如何将消息路由到对应的队列。路由方式有以下4种。

消息者收到消息之后,会按照默认开启的手动确认模式向MQ投递ack消息,代表消费者已经成功处理了这条消息,MQ可以将这条消息从队列中删除。没有收到确认的消息仍会存在于队列中,等待下次继续投递。

当一个队列有多个消费者订阅时,MQ默认逐个分发给每个消费者,而不管其处理的任务复杂度,若要做到消息的公平派发,需要消费者指定prefetch_count=1,告诉MQ在处理完当前消息之前不要派发下条消息过来。

更多的细节可以参考Rabbitmq官方文档