文章目录
一、RabbitMQ延迟队列实现
1.1、RabbitMQ延迟队列实现流程
-
生产者生产一条延迟消息,根据延迟时间的不同,利用不同的routing-key将消息路由到不同的延迟队列,每个队列都设置了不同的 TTL 属性 ( TTL ( Time To Live ) 生存时间 ),并绑定到同一个死信交换机中。
-
消息过期后,根据routing-key的不同,又会被死信交换机路由到不同的死信队列中,消费者只需要监听对应的死信队列进行消费即可。
1.2、配置RabbitMQ连接
#[ RabbitMQ相关配置 ]
#rabbitmq服务器IP
spring.rabbitmq.host=安装RabbitMQ的服务器IP
#rabbitmq服务器端口(默认为5672)
spring.rabbitmq.port=5672
#用户名
spring.rabbitmq.username=guest
#用户密码
spring.rabbitmq.password=guest
#虚拟主机(一个RabbitMQ服务可以配置多个虚拟主机,每一个虚拟机主机之间是相互隔离,相互独立的,授权用户到指定的virtual-host就可以发送消息到指定队列)
#vhost虚拟主机地址( 默认为/ )
spring.rabbitmq.virtual-host=/
1.3、创建配置类,配置两个交换机、四个队列、以及根据路由键配置交换机和队列的绑定关系
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class RabbitMQConfiguration {
//延迟交换机
public static final String DELAY_EXCHANGE = "delay_exchange";
//延迟队列A
public static final String DELAY_QUEUE_A = "delay_queue_a";
//延迟队列B
public static final String DELAY_QUEUE_B = "delay_queue_b";
//延迟路由键10S
public static final String DELAY_QUEUE_10S_ROUTING_KEY = "delay_queue_10s_routing_key";
//延迟路由键60S
public static final String DELAY_QUEUE_60S_ROUTING_KEY = "delay_queue_60s_routing_key";
//死信交换机
public static final String DEAD_LETTER_EXCHANGE = "dead_letter_exchange";
//死信队列A
public static final String DEAD_LETTER_QUEUE_A = "dead_letter_queue_a";
//死信队列B
public static final String DEAD_LETTER_QUEUE_B = "dead_letter_queue_b";
//死信路由键10S
public static final String DEAD_LETTER_QUEUE_10S_ROUTING_KEY = "dead_letter_queue_10s_routing_key";
//死信路由键60S
public static final String DEAD_LETTER_QUEUE_60S_ROUTING_KEY = "dead_letter_queue_60s_routing_key";
//延迟交换机
@Bean("delayExchange")
public DirectExchange delayExchange(){
return new DirectExchange(DELAY_EXCHANGE, true, false);
}
//延迟队列A
@Bean("delayQueueA")
public Queue delayQueueA(){
Map<String, Object> args = new HashMap<>();
//设置延迟队列绑定的死信交换机
arg