RabbitMQ队列和交换机的相关知识点
1、关于交换机和队列的autodelete属性
交换机的autodelete属性作用:当属性值设置为true,那么当所有的队列断开于交换机的绑定,那么交换机会自动删除
队列的autodelete属性作用:自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当所有的相关消费者断开连接时,队列将会被删除
2、关于队列的exclusive属性
排它队列,意味着队列只能被一个消费者使用
3、自动过期队列 x-expires属性
没有消费者在消费队列,会被从RabbitMQ中被删除。就算此时有消息进入队列,也会被删除。
4、队列消息自动过期
就是为每个队列设置消息的超时时间。只要给队列设置x-message-ttl 参数,就设定了该队列所有消息的存活时间,时间单位是毫秒。如果声明队列时指定了死信交换器,则过期消息会成为死信消息
5、永久队列
持久化队列和非持久化队列的区别是,持久化队列会被保存在磁盘中,固定并持久的存储,当Rabbit服务重启后,该队列会保持原来的状态在RabbitMQ中被管理,而非持久化队列不会被保存在磁盘中,Rabbit服务重启后队列就会消失。可以将交换机和队列的autodelete设置为false,且durable设置为true
注意:调用channel的BasicPublish将IBasicProperties属性中的DeliveryMode设置为持久化(2),并设置mandatory设为true,并监听BasicReturn事件,防止发送端丢失消息的情况,
这样能保证消息持久化和队列持久化同时发生作用,且交换机也需要设置持久化,防止发送方的Producer无法发送消息.且同时设置队列和交换机的autodelete为false,防止交换机和队列被意外删除的情况出现.
需要注意的时交换机的持久化不会影响队列的持久化
队列参数列表