在RabbitMQ 中,生产者生产的消息先储存在队列中,然后消费者从队列中获取进行消费
因此,本节来学习一下队列的相关知识
一、队列种类
1.1 临时队列
RabbitMQ 服务器重启,这些队列就不会存在,所以称之为临时队列
临时队列又分为:
1)自动删除队列
和普通队列在使用上没有什么区别,唯一的区别是,当消费者断开连接时,队列将会被删除
注意:自动删除队列可能绑定多个消费者,当最后一个消费者断开连接才会执行删除
创建队列时设置属性auto-delete 标识为 true 即可
系统声明的随机队列,缺省就是自动删除的
2) 单消费者队列
普通队列允许的消费者没有限制
多个消费者绑定到多个队列时,RabbitMQ 会采用轮询进行投递
如果需要消费者独占队列,在队列创建的时候,将上图中属性 exclusive设为true即可
3)自动过期队列
指队列在超过一定时间没使用,会被从 RabbitMQ 中被删除
什么是没使用?
1、一定时间内没有 Get 操作发生
2、没有 Consumer 连接在队列上
注意:就算一直有消息进入队列,也不算队列在被使用
通过声明队列时,设定 x-expires 参数即可,单位毫秒
String queueName = "setQueue";
Map<String, Object> arguments = new HashMap<String, Object>();
arguments.put("x-expires",10*1000);//10秒被删除
/*加入队列的各种参数*/
channel.queueDeclare(queueName,false,false, false,arguments);
1.2 持久队列
持久化队列和非持久化队列的区别是
持久化队列会被保存在