Rabbit MQ作为按照AMQP协议实现的老牌消息中间件,已经有将近十年的历史了。诞生于金融行业,现在作为企业级消息队列广泛用在各个领域。最近因为工作关系接触到了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种。
routing key
(queue和exchange绑定时可指定)直接投递到到队列routing key
由.
号分隔的字符串指定,如quick.orange.rabbit
,每个分隔的字符串最好能对应一定的业务含义。支持模糊匹配,如*.orange.rabbit
或如quick.orange.#
。*
精确匹配一个字符串,#
匹配0个或多个字符串。routing key
消息者收到消息之后,会按照默认开启的手动确认模式向MQ投递ack消息,代表消费者已经成功处理了这条消息,MQ可以将这条消息从队列中删除。没有收到确认的消息仍会存在于队列中,等待下次继续投递。
当一个队列有多个消费者订阅时,MQ默认逐个分发给每个消费者,而不管其处理的任务复杂度,若要做到消息的公平派发,需要消费者指定prefetch_count=1
,告诉MQ在处理完当前消息之前不要派发下条消息过来。
更多的细节可以参考Rabbitmq
的官方文档