生产者代码
@Resource
private RabbitTemplate rabbitTemplate;
//创建普通队列,交换机,并绑定
Map<String, Object> arguments = new HashMap<>();
arguments.put("x-dead-letter-exchange","dead-exchange");
arguments.put("x-dead-letter-routing-key","dead");
BindingBuilder.bind(new Queue("normal-queue",false,false,false,arguments)).to(new DirectExchange("normal-exchange")).with("normal");
//创建死信队列、交换机,并绑定
BindingBuilder.bind(new Queue("dead-queue",false,false,false,null)).to(new DirectExchange("dead-exchange")).with("dead");
String message = UUID.randomUUID().toString();
// 设置消息的 TTL 为 5 分钟(以毫秒为单位)
MessageProperties properties = new MessageProperties();
properties.setExpiration("300000");
//发送消息
rabbitTemplate.convertAndSend("normal-exchange","normal",new Message(message.getBytes(), properties));
消费者代码
@RabbitListener(
bindings =
@QueueBinding(
value = @org.springframework.amqp.rabbit.annotation.Queue(value = "dead-queue",autoDelete = "false"),
exchange = @Exchange(value = "dead-exchange",type = ExchangeTypes.DIRECT),
key = "dead"
)
)
public void ttlProcess(String message){
//接收到消息后 正常进行业务处理
System.out.println(System.currentTimeMillis()+"-死信队列接收到数据:"+message);
}