RabbitMQ消息模型
Rabbit MQ作为按照AMQP协议实现的老牌消息中间件,已经有将近十年的历史了。诞生于金融行业,现在作为企业级消息队列广泛用在各个领域。最近因为工作关系接触到了Rabbitmq,对其工作方式做了大致了解。
生产者将消息发送到mq之后,会首先经过exchange,由exchange决定如何将消息路由到对应的队列。路由方式有以下4种。
fanout 也即广播模式,exchange收到消息后将会把消息投递到每个和它绑定的队列
direct 消息按照指定的routing key(queue和exchange绑定时可指定)直接投递到到队列
topic 复杂的发布/订阅模式。routing key由.号分隔的字符串指定,如quick.orange.rabbit,每个分隔的字符串最好能对应一定的业务含义。支持模糊匹配,如*.orange.rabbit或如quick.orange.#。*精确匹配一个字符串,#匹配0个或多个字符串。
headers 按照消息头投递到队列,不考虑routing key
消息者收到消息之后,会按照默认开启的手动确认模式向MQ投递ack消息,代表消费者已经成功处理了这条消息,MQ可以将这条消息从队列中删除。没有收到确认的消息仍会存在于队列中,等待下次继续投递。
当一个队列有多个消费者订阅时,MQ默认逐个分发给每个消费者,而不管其处理的任务复杂度,若要做到消息的公平派发,需要消费者指定prefetch_count=1,告诉MQ在处理完当前消息之前不要派发下条消息过来。
更多的细节可以参考Rabbitmq的官方文档
本文转载自异步社区
原文链接:
https://www.epubit.com/articleDetails?id=N579fd779-9bc1-469f-b381-78faf727985a |
- 点赞
- 收藏
- 关注作者
评论(0)