本文参考以下链接摘录翻译:
https://www.rabbitmq.com/tutorials/amqp-concepts
队列(Queues)
AMQP 0-9-1模型中的队列和其他消息任务队列系统中的队列非常相似:它们用于存储被应用消费的消息。队列和交换机有一些相同的属性,但也有一些额外的属性:
- 名字(Name)
- 可持久化(Durable)(让队列在消息代理重启后依然存在)
- 排他性(Exclusive)(让队列只被一个连接使用,当这个连接关闭时,该队列会被删除)
- 自动删除(Auto-delete)(当最后一个消费者取消订阅,该队列被删除)
- 参数(Arguments)(可选的:用于插件和消息代理专用的一些功能,如消息存活时间【TTL】,队列长度限制,等)
使用一个队列前,必须先声明它。声明一个队列会创建该队列,如果该队列不存在的话。如果一个队列已经存在且存在的队列的属性和声明中的属性一致,声明该队列将不会有任何效果。如果存在的队列的属性和声明中的属性不一致,一个通道级别的异常会抛出【错误码406 前置条件失败(PRECONDITION_FAILED)】
队列名字(Queue Names)
应用可以给队列设置名字或者让消息代理帮队列生成一个名字。队列的名字最长可以包含255个UTF-8字符。消息代理可以代替应用为队列生成一个唯一的名字。要使用这个功能,设置队列的名字为空字符串。生成的名字会随队列声明响应一起返回给客户端。
以"amq."开头的队列名保留为消息代理内部使用。尝试声明以“amq.”开头的队列会抛出通道级别的403异常(访问拒绝)。
队列持久性(Queue Duribility)
在AMQP 0-9-1中,队列可以声明为持久化的或临时的。一个持久化的队列的元数据存储在磁盘上,然而一个临时队列的元数据存储在内存中,如果可能的话。
若要设置消息的持久性和临时性,需要在消息发布时设置。
在持久化很重要的环境和用例中,应用必须使用持久化的队列,且确保发布者发布消息时将消息设为持久化的。
待续。。。