RabbitMQ简介和特点

前言

RabbitMQ 是使用Erlang语言开发的基于AMQP标准的开源实现,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错

 

RabbitMQ的特点

1、保证可靠性(Reliability):使用持久化、传输确认、发布确认等机制

2、灵活的路由功能(Flexible Routing):在消息进入队列之前,通过Exchange(交换器)来路由消息,对应典型的路由功能,RabbitMQ提供了内置的一些Exchange来实现、针对复杂的路由功能,可以将多个Exchange绑定在一起,也可以通过插件来实现自己的Exchange

3、支持消息集群(Clustering):多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker

4、具有高可用性(Highly Available):队列可以在集群中的机器进行镜像,在部分节点出现问题的情况下队列仍然可用

5、支持多种协议(Multi-protocol):RabbitMQ除了支持AMQP协议之外,还通过插件方式支持其它消息队列协议,比如STOMP、MQTT等

6、支持多语言客户端(Many Client):几乎支持所有常用的语言

7、提供管理界面(Management UI):RabbitMQ提供了一个简单的用户页面,用户可以监控和管理消息

8、提供跟踪机制(Tracing):RabbitMQ提供了消息跟踪机制,如果消息异常,使用者可以查出发生了什么情况

9、提供插件机制(Plugin System):RabbitMQ提供了许多插件,从多方面进行扩展,也可以自己编写自己的插件

 

整体架构图

架构介绍

1、Message(消息):由消息头和消息体组成、消息体是不透明的、消息头由一系列可选属性组成:例如routing-key路由键、priority消息优先级、delivery-mode是否持久化存储等

2、Publisher(消息生产者):向交换机发布消息的客户端应用程序

3、Exchange(交换器):用来接收消息生产者发布的消息,并将这些消息路由给服务器中的队列

4、Binding(绑定):用于消息队列和交换机之间的关联

5、Queue(消息队列):用来保存消息直到发送给消费者,是消息的容器,一条消息可以被投入到多个队列中

6、Connection(网络连接):例如一个TCP连接

7、Channel(信道):多路复用连接中的一条独立的双向数据流通道

8、Consumer(消息消费者):从消息队列中取得消息的客户端应用程序

9、Virtual Host(虚拟主机):每个vhost都是一台缩小版的RabbitMQ、它拥有自己的队列、交换器、绑定和权限机制,默认的vhost是"/"

10、Broker(消息队列服务器实体)

 

交换器类型

目前交换器有4种类型:Direct、Fanout、Topic、Headers

Direct:

Direct交换器是完全匹配、单播模式,也被称为直连型模式,如果消息中的路由键和Binding中绑定键一致,交换机将消息发送到对应的队列中

Fanout:

Fanout交换器是扇形模式,不处理路由键,只是简单将队列绑定到交换器,发送到交换器的每条消息都回被转发到该交换器绑定的所有队列中,类型子网传播,通过Fanout交换器转发消息是最快的

Topic:

Topic交换器是主题模式,通过模式匹配分发消息的路由键属性,将路由键和某种模式进行匹配,此时队列需要绑定一种模式,Topic交换器将路由键和绑定的字符串切分成单词,这些单词直接用点“.”隔开。该交换器会识别两个通配符:“#”和“*”,其中“#”匹配0个或多个单词,“*”匹配不多不少一个单词

Headers:

匹配AMQP消息的是Header而不是路由键,功能和Direct完全一致,但性能相差很多,目前几乎不用了

posted @ 2021-04-12 00:12  过期可乐  阅读(883)  评论(0编辑  收藏  举报