AMQP-0-9-1模型总结

Kopei article

AMQP-0-9-1模型

AMQP(Advanced Message Queue Protocol模型很简单, 就是publisher将消息发给exchanger中间人, 然后exchanger中间人按规则将消息的副本塞入队列中(这个过程叫binding), 接着中间人消息推送给订阅队列的消费者consumer或者消费者主动去拉取消息.

当发布消息的时候, 发布者可以给消息设置一些消息的元信息, 然后中间人就会使用这些信息作为消息路由的规则.由于网络是不稳定的, AMQP有消息确认的概念: 消费者拿到消息后需要通知中间人确认拿到消息, 然后中间人会把队列中的消息删除, 否则中间人会重发消息给另一个消费者(如果存在). 如果消息没有被确认, 同时又不能重发消息(不存在另一个消费者), 那么消息是可以被返回给发送者或者丢弃的. 可以设置dead letter queue来处理消息消费失败的情况.

AMQP是一个可编程协议

queue/exchange/bindingAMQP中都是实体(entity), 所以AMQP的实体/路由规则等是需要应用自己定义实现的. (就是再rabbitmq代码里定义)

Exchange和exchange类型

Exchange接受生产者发送的消息, 然后根据路由规则将消息送给零个或多个队列. 路由规则取决于exchange typebinding. AMQP有4种交换类型:

1
2
3
4
5
6
7
8
9
10
11
|-----------------+----------------|
| name | default pre-declared names|
|-----------------+----------------|
| direct(default) | (empty string) and amq.direct|
|-----------------+----------------|
| fanout | amq.fanout |
|-----------------+----------------|
| topic | amq.topic |
|-----------------+----------------|
| headers | amq.match(amq.headers in rabbitmq)|
|-----------------+----------------|

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