消息队列-RabbitMQ基础

举报
object 发表于 2024/04/02 20:29:32 2024/04/02
【摘要】 RabbitMQ?RabbitMQ是基于AMQP基础实现,可支持多种开发语言客户端,如:JAVA、Python等RabbitMQ是Erlang语言编写的开源消息队列,本身支持很多协议:AMQP,XMPP,SMTP,STOMP。实现了Broker构架。RabbitMQ特点?可靠性:持久化、传输确认及发布确认等机制灵活的路由:通过交换器来路由消息,可自由搭配,可以通过插件自制扩展性:多个Rabb...

RabbitMQ?

RabbitMQ是基于AMQP基础实现,可支持多种开发语言客户端,如:JAVA、Python等

RabbitMQ是Erlang语言编写的开源消息队列,本身支持很多协议:AMQP,XMPP,SMTP,STOMP。实现了Broker构架。


RabbitMQ特点?

  • 可靠性:持久化、传输确认及发布确认等机制
  • 灵活的路由:通过交换器来路由消息,可自由搭配,可以通过插件自制
  • 扩展性:多个RabbitMQ节点可以组成一个集群
  • 高可用性:队列可以在集群中设置镜像,部分节点出现问题的情况下仍可用
  • 多种协议:支持多种协议,AMQP,XMPP,SMTP,STOMP协议
  • 多语言客户端:RabbitMQ几乎支持所有常用语言,比如Java、Python等等
  • 管理界面:RabbitMQ提供了一个易用的用户界面
  • 插件机制:提供了许多插件,以实现从多方面扩展


RabbitMQ核心概念?

RabbitMQ整体上是一个生产者与消费者模型,主要负责接收存储转发消息。

RabbitMQ的整体模型架构如下:

Producer(生产者)和Consumer(消费者)

  • Producer:生产消息的一方
  • Consumer:消费消息的一方

消息一般由2部分组成:

  • 消息头:可选属性组成。如routing-key(路由键)、priority(消息的优先权)、delivery-mode(持久化标识)
  • 消息体:消息主体


Exchange(交换器)

在RabbitMQ中,消息先传递到Exchange(交换器),Exchange(交换器)把消息再分配到对应的Queue(消息队列)。

Exchange(交换器)用来接受生产者发送的消息并将这些消息路由给服务器中的队列中,如果路由不到,或返回给Producer或直接丢弃掉

Exchange(交换器)有4种类型,不同的类型对应不同的路由策略:direct(默认)、fanout、topic和headers

生产者将消息发给交换器的时候,一般会指定一个RoutingKey(路由键),用来指定消息的路由类型,RoutingKey需要与交换器类型和BindingKey(绑定键)联合使用才能生效。

RabbitMQ通过Binding(绑定)将Exchange(交换器)与Queue(消息队列)关联起来,在绑定的时候一般会指定一个BindingKey(绑定键)。这样RabbitMQ就知道如何正确将消息路由到队列了。Exchange和Queue的绑定可以是多对多的关系。

生产者将消息发送给交换器时,需要一个RoutingKey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。BindingKey允许相同,但并不一定会生效,需要依赖于交换器类型。例如fanout无效


Queue(消息队列)

Queue(消息队列)用来保存消息直到发送到消费者,是消费者的容器。一个消息可投入到一个或多个队列。等待消费者连接到这个队列将其取走。

RabbitMQ中消息只存储到队列中,这一点和Kafka这种消息中间件相反。Kafka将消息存储到topic(主题)这个逻辑层面,而相对应的队列只是topic实际存储文件中的位移标识

多个消费者可以订阅同一个队列,这时队列的消息会被平均分摊(Round-Robin,即轮询)给多个消费者处理,不是每个消费者都能收到,避免重复消费

RabbitMQ不支持队列层面的广播消费,如果需要,则需要二次开发,不建议。


Broker(消息中间件的服务节点)

RabbitMQ Broker可以简单地看做一个RabbitMQ服务节点,或者RabbitMQ服务示例。大多数情况下也可以将一个RabbitMQ Broker看作一台RabbitMQ服务器。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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