关于rabbitmq和定时任务一起使用的疑惑

学习商医通的时候我发现,“问题描述,每天八点定时给预约的人发短信通知”,使用了定时任务了为什么还要多此一举使用消息队列呢。经过思考,我觉得是因为,要是不适用定时任务,就会先查出所有预约的人,然后遍历一个一个发完短信了才能给下一个发,可是我又有了疑惑,即便进入队列那也是需要排队的呀,那么用户体验好在哪

消息的过期时间可以在两个层面进行设置,具体取决于你的需求。

在发消息的时候设置过期时间:可以在发送消息时通过 BasicProperties 的 expiration 属性来设置单个消息的过期时间,以毫秒为单位。例如:

java
复制
BasicProperties.Builder propsBuilder = new BasicProperties.Builder();
propsBuilder.expiration(“5000”); // 设置消息的过期时间为5000毫秒(5秒)
BasicProperties props = propsBuilder.build();
channel.basicPublish(exchangeName, routingKey, props, message.getBytes());
这样,每条发送的消息都会有自己的过期时间。

在队列声明时设置过期时间:可以在队列声明的参数中设置 x-message-ttl,这个参数用于设置队列中的所有消息的默认过期时间,以毫秒为单位。例如:

java
复制
Map args = new HashMap();
args.put(“x-message-ttl”, 5000); // 设置队列中所有消息的过期时间为5000毫秒(5秒)
channel.queueDeclare(QUEUE_NAME, true, false, false, args);
这样,队列中的所有消息都会有相同的过期时间,如果在发送消息时没有设置个别消息的过期时间,将使用队列声明时设置的默认值。

需要注意的是,这两种方式都是可选的,你可以根据实际情况选择其中的一种或者两种方式来设置消息的过期时间。如果同时使用了两种方式,消息的过期时间是这两个值的最小值,即最短过期时间为准。

你可能感兴趣的:(spring,boot)