死信交换机和死信队列开发
使用场景:比如商户通过审核后必须要在24小时之内上传对应的资质信息,如果未上传则冻结该商户,那么消息的过期时间设置为24小时,24小时过后则消息进入死信队列,消费者那到死信的队列的数据后对改商户实施冻结处理
- 声明死信队列,交换机以及路由key
- 创建死信队列,交换机并根据路由key将其绑定
- 声明普通队列,交换机以及路由key
- 创建普通队列,交换机并根据路由key将其绑定(普通队列是没有消费者消费的,并设置队列的过期时间以及过期后路由到的交换机以及对应的路由key)
package net.xdclass.xdclasssp.config;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class RabbitMQConfig {
public static final String LOCK_MERCHANT_DEAD_QUEUE = "lock_merchant_dead_queue";
public static final String LOCK_MERCHANT_DEAD_EXCHANGE = "lock_merchant_dead_exchange";
public static final String LOCK_MERCHANT_ROUTING_KEY = "lock_merchant_routing_key";
@Bean
public Exchange lockMerchantDeadExchange(){
return new TopicExchange(LOCK_MERCHANT_DEAD_EXCHANGE,true,false);
}
@Bean
public Queue lockMerchantDeadQueue(){
return QueueBuilder.durable(LOCK_MERCHANT_DEAD_QUEUE).build();
}
@Bean
public Binding lockMerchantBinding(){
return new Binding(LOCK_MERCHANT_DEAD_QUEUE,Binding.DestinationType.QUEUE,
LOCK_MERCHANT_DEAD_EXCHANGE,LOCK_MERCHANT_ROUTING_KEY,null);
}
public static final String NEW_MERCHANT_QUEUE = "new_merchant_queue";
public static final String NEW_MERCHANT_EXCHANGE = "new_merchant_exchange";
public static final String NEW_MERCHANT_ROUTIING_KEY = "new_merchant_routing_key";
@Bean
public Exchange newMerchantExchange(){
return new TopicExchange(NEW_MERCHANT_EXCHANGE,true,false);
}
@Bean
public Queue newMerchantQueue(){
Map args = new HashMap<>(3);
//消息过期后,进入到死信交换机
args.put("x-dead-letter-exchange",LOCK_MERCHANT_DEAD_EXCHANGE);
//消息过期后,进入到死信交换机的路由key
args.put("x-dead-letter-routing-key",LOCK_MERCHANT_ROUTING_KEY);
//过期时间,单位毫秒
args.put("x-message-ttl",10000);
return QueueBuilder.durable(NEW_MERCHANT_QUEUE).withArguments(args).build();
}
@Bean
public Binding newMerchantBinding(){
return new Binding(NEW_MERCHANT_QUEUE,Binding.DestinationType.QUEUE,
NEW_MERCHANT_EXCHANGE,NEW_MERCHANT_ROUTIING_KEY,null);
}
}



