前言:在电商系统中,可能有这样一个需求,订单下单之后30分钟后,如果用户没有付钱,则系统自动取消订单。如果用常规的定时器定时去查询,这会造成很大的消耗(频繁访问数据库)。
这里选择RabbitMQ来实现类似的功能(使用队列的TTL特性)
1.这种模式大概流程,我们需要将消息先发送到ttl
延迟队列内,当消息到达过期时间后会自动转发到ttl
队列内配置的转发Exchange
以及RouteKey
绑定的队列内完成消息消费。
2.添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>ncy>
3.yml配置
spring:
#rabbitmq消息队列配置信息
rabbitmq:
host: localhost
port: 5672
username: root
password: root
#消息发送和接收确认
publisher-confirms: true
publisher-returns: true
listener:
direct:
acknowledge-mode: manual
simple:
acknowledge-mode: manual
server:
port: 9999
4.创建一个常量类,存放队列和交换机名字--QueueContent
/**
* @Auther: cjw
* @Date: 2018/6/28 17:17
* @Description:
*/
public class QueueContent {
/**
* 普通消息通知队列名称
*/
public static final String MESSAGE_QUEUE_NAME="message.ordinary.queue";
/**
* ttl(延时)消息通知队列名称
*/
public static final String MESSAGE_TTL_QUEUE_NAME="message.ttl.queue";
/**
* 普通交换机名称
*/
public static final String DIRECT_EXCHANGE_NAME="message.ordinary.exchange";
/**
* ttl(延时)交换机名称
*/
public static final String TOPIC_EXCHANGE_NAME="message.ttl.excha