RabbitMQ消息模型

举报
竹叶青 发表于 2019/10/15 12:46:44 2019/10/15
【摘要】 Rabbit MQ作为按照AMQP协议实现的老牌消息中间件,已经有将近十年的历史了。诞生于金融行业,现在作为企业级消息队列广泛用在各个领域。最近因为工作关系接触到了Rabbitmq,对其工作方式做了大致了解。生产者将消息发送到mq之后,会首先经过exchange,由exchange决定如何将消息路由到对应的队列。路由方式有以下4种。 fanout 也即广播模式,exchange收到消息后将会...

top2.993eed9.png

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

a58520a788a14de08e8e0e44af375e7b.png


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

 

fanout 也即广播模式,exchange收到消息后将会把消息投递到每个和它绑定的队列

direct 消息按照指定的routing key(queueexchange绑定时可指定)直接投递到到队列

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


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。