RabbitMQ系列(九)RabbitMQ进阶-Queue队列参数详解

RabbitMQ系列(九)RabbitMQ进阶-Queue队列参数详解RabbitMQ进阶-Queue队列参数详解
⽂章⽬录
1.创建队列参数
我们看下队列参数
void queueDeclareNoWait(String queue, boolean durable, boolean exclusive, boolean autoDelete,
Map<String, Object> arguments) throws IOException;
1. queue 队列名称
2. durable 队列是否持久化,false:队列在内存中,服务器挂掉后,队列就没了;true:服务器重启后,队列将会重新⽣成.注意:只是队列持久
化,不代表队列中的消息持久化
3. exclusive 队列是否专属,专属的范围针对的是连接,也就是说,⼀个连接下⾯的多个信道是可见的.对于其他连接是不可见的.连接断开后,
该队列会被删除.注意,不是信道断开,是连接断开.并且,就算设置成了持久化,也会删除
4. autoDelete 如果所有消费者都断开连接了,是否⾃动删除.如果还没有消费者从该队列获取过消息或者监听该队列,那么该队列不会删除.
只有在有消费者从该队列获取过消息后,该队列才有可能⾃动删除(当所有消费者都断开连接,不管消息是否获取完)1yys
5. arguments ,args参数我们可以通过界⾯看下,⼀共下⾯这么多参数
seek benefitsMessage TTL : 消息⽣存期,可以⽤作延迟队列,消息延迟消费等场景
Auto expire : 队列⽣存期,队列多长时间(毫秒)没有被使⽤(访问)就会被删除.换个说法就是,当队列在
指定的时间内没有被使⽤(访问)就会被删除
Max length : 队列可以容纳的消息的最⼤条数
Max length bytes : 队列可以容纳的消息的最⼤字节数
Overflow behaviour : 队列中的消息溢出后如何处理
Dead letter exchange : 死信队列交换机、溢出的消息需要发送到绑定该死信交换机的队列
Dead letter routing key :死信队列RK、 溢出的消息需要发送到绑定该死信交换机,并且路由键匹配的队列
Maximum priority : 最⼤优先级,数字越⼤,越优先消费,可以针对实时性强的消息优先消费
Lazy mode : 懒队列,在磁盘上尽可能多地保留消息以减少RAM使⽤;如果未设置,则队列将保留内存缓存以尽可能快地传递消息Master locator : 集相关设置,将队列设置为主位置模式,确定在节点集上声明时队列主位置所依据的规则
下⾯我们⼀ ⼀来验证下属性,下⾯的队列中的RoutingKey 很多我都直接⽤队列名做RoutingKey了,事先声明下
2.参数解析
2.1 Message TTL
我们新建⼀个TTL的队列, 设置x-message-ttl:10000,即10s,发布⼀条消息,看这个消息如果超过⽣存周期,如何处理
通过Publish ⼀条消息
然后观察下 消息在队列中的⽣存时间
2.2 Auto expire
队列多长时间(毫秒)没有被使⽤(访问)就会被删除.换个说法就是,当队列在指定的时间内没有被使⽤(访问)就会被删除.新建⼀个队列,持久化,然后设置 周期20s,设置x-expires:20000
队列创建
全能教教主
过了20s后,队列⾃动消失,变成只有1个队列了
我试试如果给队列加个消费者,看看是不是能活久⼀点
package queue.params;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import conn.MqConnectUtil;
import subscrib3.ExchangeTypeEnum;
import java.util.HashMap;
import java.util.Map;
import static subscrib3.direct.SubscribeConst.ROUTINGKEY_C;
import static subscrib3.direct.SubscribeConst.SUBSCRIBE_QUEUE_NAME_DIRECT_C;
bind9/**
* 当前描述:消费者
*
* @author: jiazijie
* @since: 2020/6/10 下午11:30
*/
public class QueueAutoExpireConsumer {
/**
* 队列名字
*/
private final static String SIMPLE_QUEUE_NAME = "auto_expire_test";
public static void main(String[] argv) throws Exception {
Connection connection = null;
Channel channel = null;
try {
connection = ConnectionDefault();
channel = ateChannel();
/
*声明交换机 String exchange
* 参数明细
* 1、交换机名称
* 2、交换机类型,fanout、topic、direct、headers
*/
/*声明队列
* 参数明细:
* 1、队列名称
* 2、是否持久化
* 3、是否独占此队列
* 4、队列不⽤是否⾃动删除
* 5、参数
*/
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-expires",20000);
channel.queueDeclare(SIMPLE_QUEUE_NAME, true, false, false, arguments);
//交换机和队列绑定String queue, String exchange, String routingKey
/**
* 参数明细
* 1、队列名称
* 2、交换机名称
* 3、路由key
*/
channel.queueBind(SIMPLE_QUEUE_NAME, Name(), ROUTINGKEY_C);
System.out.println(" **** Consumer->1 Waiting for messages. To exit press CTRL+C");
QueueingConsumer consumer = new QueueingConsumer(channel);
/* 消息确认机制
辞海
* autoAck true:表⽰⾃动确认,只要消息从队列中获取,⽆论消费者获取到消息后是否成功消费,都会认为消息已经成功消费
* autoAck false:表⽰⼿动确认,消费者获取消息后,服务器会将该消息标记为不可⽤状态,等待消费者的反馈,如果消费者⼀直没有反馈,那么该消息将⼀直处于不可⽤状态
*          并且服务器会认为该消费者已经挂掉,不会再给其发送消息,直到该消费者反馈
*          注意这⾥是 false,⼿动确认
*/
channel.basicConsume(SIMPLE_QUEUE_NAME, false, consumer);
int count = 0;
while (count < 10) {
QueueingConsumer.Delivery delivery = Delivery();
String message = new Body());
String message = new Body());
System.out.println(" count:" + count + " **** Consumer->2 Received '" + message + "'");
doSomeThing(message);
//返回确认状态
channel.Envelope().getDeliveryTag(), false);
count++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
channel.close();
connection.close();
}
}
/**
* 模拟处理复杂逻辑:休眠100ms
*
* @param message
* @throws Exception
*/
public static void doSomeThing(String message) throws Exception {
//遍历Count ,sleep ,接收⼀条消息后休眠 100 毫秒,模仿复杂逻辑
Thread.sleep(100);
}
}
消费者进程关掉后,队列过20s就消失了
2.3 Max length
队列可以容纳的消息的最⼤条数,超过这个条数,队列头部的消息将会被丢弃,注意是队列头部的消息被丢弃现在我们创建队列容纳5个消息
什么是生物工程⽣产者⽣产5条消息
package queue.params;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import conn.MqConnectUtil;

本文发布于:2024-09-20 14:41:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/692944.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:队列   消息   消费者   获取   交换机   是否   消费   设置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议