一篇文搞明白RabbitMQ原理和开发应用

首先思考几个问题:

  1. 什么是消息队列?消息队列可以解决什么问题?
  2. RabbitMQ可以做什么?
  3. RabbitMQ可以实现消息的过期失效吗?
  4. RabbitMQ可以实现延迟队列吗?
  5. RabbitMQ为何消息堆积越多,性能越大幅度下降?
  6. RabbitMQ的可靠性体现在哪几方面?分别是如何实现的?

什么是消息队列

提供了以松散耦合的灵活方式集成应用程序的一种机制,为我们提供了基于存储和转发的应用程序之间的异步发送,用于异步、解耦、削峰。

  • 生产者:投递消息的一方
  • 消费者:接收消息的一方
  • 虚拟机:用于权限控制
  • 队列:消息的存储容器
  • 交换机:用于将消息路由到一个或多个队列中
  • 路由键:用于规定消息的路由规则,和交换机类型联合使用实现消息的分发
  • 信道:建立在连接上的虚拟链接,每条指令都通过信道来完成(这里的连接为TCP连接,多个信道使用同一个TCP连接,多路复用)

AMQP协议

RabbitMQ就是AMQP协议的Erlang实现,我们使用 php-amqplib 扩展和RabbitMQ服务端交互都是靠发送AMQP命令实现的。AMQP协议分为三层:

  • Module Layer:位于协议的最高层,定义供客户端调用的命令,比如:声明交换机(Exchange.Declare)、声明队列(Queue.Declare)、发送消息(Basic.Publish)
  • Session Layer:位于中间层,主要负责将客户端的命令发送给服务器,再将服务端的响应返回给客户端,主要为客户端和服务器之间通信提供可靠的同步机制和错误处理
  • Transport Layer:位于最底层,主要传输二进制数据

 

三种常用交换机原理和实现

 

RabbitMQ的消息有效期(TTL)和队列有效期(expires)

 

RabbitMQ死信队列原理并实现延迟队列

 

通过存储机制和队列结构理解为什么RabbitMQ会随着队列堆积吞吐量降低

 

RabbitMQ消息队列的可靠性

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章