目录
AMQP
advanced message queue protocol
virtual host(虚拟机)
- 一个虚拟机持有一组交换机,队列,绑定;
- 用户只能在虚拟机的粒度进行权限控制;
- 每个QabbitMQ服务器都有一个默认的虚拟机’/’;
exchange(交换机)
- 交换机是存储路由绑定的路由表;
- 交换机分类:
- Fanout Exchange: 将消息发送到绑定于该交换机的所有队列;
- Direct Exchange: 将消息发送到指定关键字队列;
- Topic Exchange: 模式匹配路由键;
queue(队列)
- 队列是消息的容器;
- 队列是消费者通过程序创建的;
binding(绑定)
- 用于将队列注册到交换机中;
RabbitMQ
介绍:
RabbitMQ 是基于 AMQP 协议实现的消息队列;特点:
RabbitMQ 支持消息持久化;
RabbitMQ可以和python无缝结合;
RabbitMQ 消息持久化
- RabbitMQ默认不会持久化消息,队列,交换机的。需要持久化消息则要进行以下配置:
- 将交换机设置成durable;
- 将队列设置成durable;
- 将消息 Delivery Mode 配置成 2;
如果绑定了一个 durable 交换机 和 一个 durable 队列,则该binding也是自动持久化的;
kombu
介绍
- kombu是一个python的消息处理库;
消息的使用场景设想
- request/reply
请求/应答场景指一个消息会被发送到指定的接受者手中,由direct
交换机实现; - broadcast
广播应用场景指一个消息将会官博到所有消费者,由fanout
交换机实现; - push/subscribe
推送/主题应用场景指一个消息会根据主题将自己推送到对应主题的消费者,由topic
交换机实现;
消息可靠性
AMQP定义了两种内置的传输模式:
- persistent(持久化)
消息将会写到磁盘上,重启后可恢复; - transient(暂存)
数据只会暂存到内存中,无法在重启时恢复;
消息持久化会消耗一定的资源,但是对于一些必须持久化数据的应用,这些消耗是需要的;
- persistent(持久化)