AMQP-0-9-1模型总结
AMQP-0-9-1模型
AMQP(Advanced Message Queue Protocol
模型很简单, 就是publisher
将消息发给exchanger
中间人, 然后exchanger
中间人按规则将消息的副本塞入队列中(这个过程叫binding
), 接着中间人消息推送给订阅队列的消费者consumer
或者消费者主动去拉取消息.
当发布消息的时候, 发布者可以给消息设置一些消息的元信息, 然后中间人就会使用这些信息作为消息路由的规则.由于网络是不稳定的, AMQP
有消息确认的概念: 消费者拿到消息后需要通知中间人确认拿到消息, 然后中间人会把队列中的消息删除, 否则中间人会重发消息给另一个消费者(如果存在). 如果消息没有被确认, 同时又不能重发消息(不存在另一个消费者), 那么消息是可以被返回给发送者或者丢弃的. 可以设置dead letter queue
来处理消息消费失败的情况.
AMQP
是一个可编程协议
queue/exchange/binding
在AMQP
中都是实体(entity), 所以AMQP
的实体/路由规则等是需要应用自己定义实现的. (就是再rabbitmq代码里定义)
Exchange和exchange类型
Exchange
接受生产者发送的消息, 然后根据路由规则将消息送给零个或多个队列. 路由规则取决于exchange type
和binding
. AMQP
有4种交换类型:
1 | |-----------------+----------------| |
headers exchange
用的比较少, 说一下. 这种类型的中间人不使用routing key
作为路由规则, 而是使用生产者在消息中的头部x-match
定义的k-v值.
队列
queue
是存放消息的buffer, 与exchange
分享一些共同的属性, 同时有一些自己属性可以定义:
- Name
- Durable (survive during restart)
- Exclusive (only use by one consumer)
- Auto-delete (delete when last consumer unsubscribes)
- Arguments (optional, )
- Post title:AMQP-0-9-1模型总结
- Post author:Kopei
- Create time:2019-02-28 18:30:00
- Post link:https://kopei.github.io/2019/02/28/middleware-2019-02-28-amqp-model/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments