RabbitMQ实战篇4-队列(queue)


队列在声明(declare)后才能被使用。如果一个队列尚不存在,声明一个队列会创建它。如果声明的队列已经存在,并且属性完全相同,那么此次声明不会对原有队列产生任何影响。如果声明中的属性与已存队列的属性存在差异,那么一个错误代码为406的通道级异常就会被抛出。

队列的属性

队列中存储着即将被消费掉的信息,它有如下属性:

1、名称
2、持久性(消息代理重启后,队列依旧存在)
3、独享(只被一个连接(connection)使用,而且当连接关闭后队列即被删除)
4、自动删除(当最后一个消费者退订后即被删除)

5、其他参数:(消息代理用他来完成类似与TTL的某些额外功能)

队列名称

应用(application)可以为队列取一个名字,或者让消息代理(broker)直接生成一个名字给队列。队列的名字可以是最多255字节的一个utf-8字符串。若希望AMQP消息代理生成队列名,需要给队列的name参数赋值一个空字符串:在同一个通道(channel)的后续的方法(method)中,我们可以使用空字符串来表示之前生成的队列名称。之所以之后的方法可以获取正确的队列名是因为通道可以默默地记住消息代理最后一次生成的队列名称。

以"amq."开始的队列名称被预留做消息代理内部使用。如果试图在队列声明时打破这一规则的话,一个通道级的403 (ACCESS_REFUSED)错误会被抛出。

Queue Durability 队列持久化

持久化队列(Durable queues)会被存储在硬盘上,当消息代理(broker)重启的时候,它依旧存在。没有被持久化的队列称作暂存队列(Transient queues)。并不是所有的场景和案例都需要将队列持久化。

持久化的队列并不会使得路由到它的消息也具有持久性。倘若消息代理挂掉了,重新启动,那么在重启的过程中持久化队列会被重新声明,无论怎样,只有经过持久化的消息才能被重新恢复。


回到目录


转载请务必保留此出处(原作者):https://blog.csdn.net/zhuzhezhuzhe1


版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。

https://blog.csdn.net/zhuzhezhuzhe1



你可能感兴趣的:(RabbitMQ)