Rabbit MQ ——基本概念(一)

最近在学习rabbit mq,记录下相关概念

 

目前 MQ中简介的产品有很多,什么样的场景下适合全rabbit mq呢?

首先我们要对比下目前主流的MQ的特点:

 

1. ActiveMq :

如果你使用java开发,并且对性能要求不是特别高完全可以选择activemq,这款mq是个老牌产品了,aip非常完善,完全支持JMS规范。可以轻松的整合到spring 、支持集群部署。在中小型企业中广泛使用。

 

2.Kafka:

最大的特点就是高吞吐量,最早是用在大数据日志收集方便。不支持事物,对消息的重复、丢失、顺序没有严格的要求。对kafka的了解不太多,这里不过多的介绍。

 

3.RockerMq:

rockermq是阿里的一款产品,目前部分功能开源。使用纯java开发,借鉴了kafka的设计思想,有较高的吞吐量、稳定性强,适合大规模分布式集群部署,对消息的可靠性传输和事物的支持都非常好,并且可以保证消息的顺序性。但是部分高级特性并没有开源。

如果你们公司在使用阿里云服务强烈建议使用Rockermq.直接购买些产品用于生产。

 

RabbitMq:

rabbitmq 是基于AMQP协议模型开发的,用的是Erlang语言开发的,erlang语言最早用于交换机领域的开发,信息之前交换非常高效。Rabbitmq对数据的一致性和稳定性可靠性非常强。对性能的要求其次,但是性能表现也不错。支持集群(提供了很多种集群模式)、高可用。

 

 

 

Rabbit MQ的基础概念:

 

 

AMQP(Advanced Message Queuing Protocol高级消息队列协议):

是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

 

Rabbit MQ ——基本概念(一)_第1张图片

这副图对AMQP协议的组成非常直观。Rabbit Mq 就是基于这个标准去实现的。

 

 

核心概念:

 

Server:  就是rabbitmq启动的服务实例,也称为Broker,接受客户端请求连接,并提供服务。

 

Virtual Host:  虚拟主机,主要用于逻辑隔离,是最上层的消息路由,类似mqsql服务中不同的数据库的概念。一个virtual host中可以有多个exchange ,在同一个virtual Host中不能有相同名称的exchange.在我们的实际开发中可以有多个应用服务,每一个服务就可以对应一个VirtualHost

 

Exchange :  交换机,接收消息,根据Routing key将消息路由到对应的消息队列(Message Queue)中。一个Exchange中可以有多个Message Queue,但名字能相同。

 

Message Queue: 用户保存生产者发来的消息,提供给消费者进行消费。每一个Queue都要绑定在某个Exchange下。

可以对Queue设置相关的属性,如:Durability :是否持久化,durable是,Transient 否。 

Authordelete 属性,yes的话代表当最后一个监听被移除之后,该Queue会自动删除

 

Binding : Exchange和Queue的一个连接关系(根据绑定时传入的的RoutingKey建立映射关系),两个交换机之前也可以绑定。

 

Routing key : 一个路由规则,虚拟机可用它来确定如何路由一个特定的消息

 

Message:消息,是服务器和应用程序之前传送的数据,主要由两部分组成,Properties,和Payload(Body)

常用的属性有:delivery mode(2持久化,1内存模式) ,headers(自定义属性),priority(消息优先级),correlation_id(消息唯一标示,可绑定业务id),rely_to(消息失败后发到哪个队列中),expiration(消息的过期时间)

 

Connection:连接,应用程序与Broker的网络连接。

 

Channel:网络信道,几乎所有的操作都是在Channel中进行,Channel是进行消息读写的通道,客户端可以连接多个Channel,每一个Channel代表一个会话任务。

 

 

 

Rabbit Mq 整体架构图:

 

Rabbit MQ ——基本概念(一)_第2张图片

 

从图中可以看出,生产都只关心将消息发送到哪个Exchange中。而消费者只关心获取哪个队列的消息。完全解偶,由Exchange根据发过来的RoutingKey 路由到Queue中。

 

 

 

Exchange 详解:

 

1. 常用属性:

1.1, name: 交换机的名称

 

1.2,  type: 交换机的类型 direct ,topic,fanout ,headers

 

1.3,Durability: 是否需要持久化,true为持久化

 

1.4,Auto Delete :当最后一个绑定到exchange上的队列删除 后,自动 删除 Exchange

 

 

2,Type 类型介绍:

2.1 Direct Exchange : 

所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue中,就是Routing Key的值和队列的名称保持一致(完全匹配),直接路由到队列中。

图:

Rabbit MQ ——基本概念(一)_第3张图片

 

 

 

2.2  Topic Exchange :  

所有发送到Topic Exchange 的消息被转发到所有关心Routing Key中指定的Topic的Queue上(通配符匹配模式)。 Exchange 将RouteKey 和某Topic进行模糊匹配,此时队列要绑定一个Topic,

符号 “#” 匹配一个或多个词,

符号“*”  匹配一个单词。

例如: “log.#” 能够匹配到 “log.info.oa”。               "Log.*" 只会匹配到 “log.error”

 

图:

Rabbit MQ ——基本概念(一)_第4张图片

 

2.4 Fanout Exchange :

不处理路由键,只需要简单的将队列绑定到交换机上,发送到交换机的消息都会转发到与改交换机绑定的所有队列上。

Rabbit MQ ——基本概念(一)_第5张图片

 

 

你可能感兴趣的:(rabbitmq,rabbitmq)