AMQP协议

360 阅读2分钟

AMQP协议是什么

AMQP是一个进程进行间消息异步通信的网络协议。

AMQP大体框架

image.png

流程

生产者生产消息,把消息发送给交换器,交换器找到相应的队列,把消息放到队列中,推送消息给消费者,或者消费者按时去拉取队列中的消息。

交换器

4种交换器

fanout扇形交换器

以广播的形式把消息发送给所有队列。

Direct直接交换器

交换器把消息发送到与自己绑定的队列中,严格匹配。

Topic主题交换器

~,模糊匹配。

Headers头部交换器

根据消息的头部属性headers属性匹配。

消息机制

  • 自动确认:消息发送到消费者,就从队列中删除。
  • 手动确认:消费端接收到消息后,处理完成后返回一个ack后才从队列中删除。

消息的属性:

  • Content type(内容类型)
  • Content encoding(内容编码)
  • Routing key(路由键)
  • Delivery mode (persistent or not)
  • 投递模式(持久化 或 非持久化)
  • Message priority(消息优先权)
  • Message publishing timestamp(消息发布的时间戳)
  • Expiration period(消息有效期)
  • Publisher application id(发布应用的 ID)

生命周期

消息的生命周期

  1. 生产者生产消息。
  2. 交换器把消息分发到若干个服务器上的消息队列上。如果找不到对应的路由,会把消息返回给消费者或者丢弃。
  3. 一条消息可以存在于许多消息队列中。 服务器可以通过复制消息,引用计数等方式来实现。这不会影响互操作性。 但是,将一条消息路由到多个消息队列时,每个消息队列上的消息都是相同的。 没有可以区分各种副本的唯一标识符。
  4. 消息到达队列。
  5. 把消息传递给消费者时,可以立即删除(自动确认),也可以等消费者返回一个处理成功的ack后再删除(手动确认)。

交换器的生命周期

如果未持久化,重启后销毁。一般情况不销毁。

队列的生命周期

未持久化的话,在一段时间内,没有消费者去监听的话,自动销毁。持久化,不销毁。

使用方法和场景

和rabbitmq类似,mq做了扩展。