boot-rabbitmq-死信队列(二)
@Component
public class DeadConsumer {
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange(value = "ex.manual.dead"),
value = @Queue(value = "q.manual.dead", durable = "true"),
key = "k"))
public void manualRetryDead(String message, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, Channel channel) throws IOException {
System.out.println("进入死信队列,消费异常消息");
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()) + ": " + message);
}
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange(value = "ex.manual"),
value = @Queue(value = "q.manual", durable = "true", arguments = {
//绑定死信交换机
@Argument(name = "x-dead-letter-exchange", value = "ex.manual.dead"),
//绑定死信队列
@Argument(name = "x-dead-letter-routing-key", value = "k"),
//配置最大存活时间,毫秒
@Argument(name = "x-message-ttl", value = "10000", type = "java.lang.Integer")
}),
key = "manual"), ackMode = "MANUAL")
public void manualRetry(String message, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, Channel channel) throws IOException {
try {
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()) + ": " + message);
if (1 == 1) {
throw new NullPointerException("aaa");
}
channel.basicAck(deliveryTag, false);
} catch (Exception e) {
//false 会进入死信队列
channel.basicReject(deliveryTag, false);
}
}
}
结果:
consume: 2021-11-29 14:54:34: hello world
进入死信队列,消费异常消息
2021-11-29 14:54:34: hello world