快捷搜索:  汽车  科技

java队列和阻塞队列:java实现消息队列以及延迟消息

java队列和阻塞队列:java实现消息队列以及延迟消息原文链接:https://blog.csdn.net/Violet_201903027/article/details/114116206前提条件:放置在DelayQueue的元素需要实现Delayed接口,Delayed接口使对象成为延迟对象,它使存放在DelayQueue类中的对象具有了激活日期应用场景:消息生产和消费有时间窗口要求,例如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条延时消息。这条消息将会在 30 分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单。如已完成支付则忽略。通过消息触发一些定时任务,例如在某一固定时间点向用户发送提醒消息。

1.java实现延迟消息(队列DelayQueue)

DelayQueue是一个支持延时获取元素的无界阻塞队列。队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。

缓存系统的设计:这里使用DelayQueue保存缓存元素的有效期,一个线程(生产者)设置失效实现循环添加消息,使用一个线程(消费者)循环查询

DelayQueue,一旦能从DelayQueue中获取元素时,表示缓存有效期到了

应用场景:

消息生产和消费有时间窗口要求,例如在电商交易中超时未支付关闭订单的场景,在订单创建时会发送一条延时消息。这条消息将会在 30 分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成,则关闭订单。如已完成支付则忽略。

通过消息触发一些定时任务,例如在某一固定时间点向用户发送提醒消息。

前提条件:放置在DelayQueue的元素需要实现Delayed接口,Delayed接口使对象成为延迟对象,它使存放在DelayQueue类中的对象具有了激活日期

java队列和阻塞队列:java实现消息队列以及延迟消息(1)

2.实现Delayed接口

java队列和阻塞队列:java实现消息队列以及延迟消息(2)

3.生产者

java队列和阻塞队列:java实现消息队列以及延迟消息(3)

4.消费者

java队列和阻塞队列:java实现消息队列以及延迟消息(4)

5.main方法

java队列和阻塞队列:java实现消息队列以及延迟消息(5)

6.效果

java队列和阻塞队列:java实现消息队列以及延迟消息(6)

原文链接:https://blog.csdn.net/Violet_201903027/article/details/114116206

猜您喜欢: