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

文章讨论了在商医通系统中,为何在使用定时任务发送预约短信的同时还需要引入消息队列。通过消息队列可以避免一次性加载所有预约用户导致的性能问题,并且介绍了如何设置消息的过期时间,包括在发送消息时和队列声明时的两种方法,确保消息处理的效率和准确性。
摘要由CSDN通过智能技术生成

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

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

在发消息的时候设置过期时间:可以在发送消息时通过 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<String, Object> args = new HashMap<String, Object>();
args.put(“x-message-ttl”, 5000); // 设置队列中所有消息的过期时间为5000毫秒(5秒)
channel.queueDeclare(QUEUE_NAME, true, false, false, args);
这样,队列中的所有消息都会有相同的过期时间,如果在发送消息时没有设置个别消息的过期时间,将使用队列声明时设置的默认值。

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值