RabbitMQ基础概念

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。

AMQP协议

AMQP协议是一个提供统一消息服务的应用层标准高级消息队列协议,在AMQP协议中重要的组件有以下几种:

  1. Server:接收客户端的连接,实现AMQP实体服务;
  2. Connection:连接,应用程序与Server的网络连接,TCP连接;
  3. Channel:信道,消息读写等操作等操作在信道中进行。客户端可以建立多个信道,每个信道代表一个会话任务;
  4. Message:消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以很复杂。有Properties和Body组成。Properties为外包装,可以对消息进行修饰,比如消息的优先级,延迟等高等级特性;Body就是消息体内容;
  5. **Virtual Host:**虚拟主机,用于逻辑隔离。一个虚拟主机里面可以有若干个Exchange和Queue;
  6. Exchange:交换机,接收消息,按照路由规则将消息路由到一个或者多个队列;
  7. Binding:绑定,交换器和消息队列之间的虚拟连接,绑定中可以包含一个或者多个RoutingKey;
  8. RoutingKey:路由键,生产者将消息发送到交换器的时候,会发送一个RoutingKey,用来指定路由规则,这样交换机就可以知道消息发送到哪个队列。
  9. Queue:消息队列,用来保存消息,供消费者消费
    10.AMQP协议模型有三部分组成:生产者,消费者和服务端,生产者是投递消息的一方,首先连接到Server,建立一个连接,开启一个信道;然后生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。同理,消费者也需要进行建立连接,开启信道等操作,便于接收信息。接着生产者就可以发送消息,发送到服务端中的虚拟主机,虚拟主机中的交换器根据路由键选择路由规则,然后发送到不同的消息队列中,这样订阅勒消息队列的消费者就可以获取到消息,进行消费。

RabbitMQ的高级特性

  1. 过期时间(TTL):RabbitMQ可以对消息和队列设置TTL;RabbitMQ支持设置消息的过期时间,在消息发送的时间可以进行指定,每条消息的过期时间可以不同;不设置过期时间则不会过期;
  2. 消息确认:为了保证消息从队列可靠的到达消费者,RabbitMQ提供勒消息确认机制。消费者订阅队列的时候,可以指定autoAck参数,当autoAck参数为true时,RabbitMQ自动把发送出去的消息设置为确认,然后从内存或者硬盘中删除,而不管消费者是否真正消费到了这些消息。当autoAck为flase的时候,RabbitMQ会等待消费者回复的确认信号,收到确认信号之后才从内存或者磁盘中删除信息;
  3. 持久化:交换机持久化、队列持久化、和消息的持久化;
  4. 死信队列:当消息在一个队列中变成死信之后,他就能被重新发送到另一个交换器中,这个交换器成为死信交换器,与该交换器绑定的队列称为死信队列。当发生异常的时候,消息不能够被消费者正常消费,被加入到了死信队列中。后续的程序可以根据死信队列中的内容分析当时发生的一场,进而改善和优化系统;
  5. 延迟队列:一般的队列,消息一旦进入队列就会被消费者立即消费。延迟队列就是进入该队列的消息会被消费者延迟消费,延迟队列中存储的对象是延迟消息,“延迟消息”是指当消息被发送出去后,等待特定的时间后,消费者才能拿到这个消息进行消费;
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐