Map<String,Object> args = new HashMap<String,Object>();
channel.queueDeclare(
queueName,//队列名
false,//是不是持久化(mq重启后队列是不是还在):临时队列/持久队列
false,//允许多个消费者消费(轮询
false,//最后一个消费者断开后队列是不是删除
args//其他参数
);
队列声明时的几个参数除了队列名有:
- 是不是rabbitmq重启后队列还在, 决定了队列是 临时队列 或者是
持久队列, 开启持久化影响性能不推荐 - 是不是不允许绑定多个消费者,如果开启 队列就是单消费者队列, 用于顺序消息,牺牲了性能
- 是不是最后一个消费者断开以后本队列就删除,就是 自动删除队列
- 一个
Map<String, Object> arguments
, 传其他高级属性
Map<String, Object> arguments
- x-dead-letter-exchange 死信交换器
- x-dead-letter-routing-key 死信消息的可选路由键
-
x-expires
队列在指定毫秒数后被删除 - x-ha-policy 创建 HA 队列
- x-ha-nodes HA 队列的分布节点
- x-max-length 队列的最大消息数
- x-message-ttl 毫秒为单位的消息过期时间,队列级别
- x-max-priority 最大优先值为 255 的队列优先排序功能(打破先进先出)
自动过期队列
arguments.put("x-expires",10*1000);//10秒被删除
这个意思是, 没有消费者绑定在队列上的情况下
10秒都没get操作了,
不管有没有投递
本队列都会删除
队列里面 消息 的超时设置
arguments.put(" x-message-ttl",45*1000);/
队列里面消息的存活时间, 45秒没被消费就死掉
死掉以后,如果有设置了死信, 会投递到死信交换器
//死信
arguments.put("x-dead-letter-exchange", DlxProcessConsumer.DLX_EXCHANGE_NAME);//绑定死信交换器
arguments.put("x-dead-letter-routing-key", "deal");//死信路由键,会替换消息原来的路由键
镜像队列
"x-ha-policy"
网友评论