Rabit-mq死信交换不起作用,导致无限次重试

问题描述 投票:0回答:1

我有一位制片人:

rabbitTemplate.convertAndSend(QueueConstants.PROVISIONING_EXCHANGE, QueueConstants.PROVISIONING_ROUTING_KEY, message);

和我的配置:

@Bean
Queue organizationProvisioningQueue() {
    return QueueBuilder.durable(QueueConstants.PROVISIONING_QUEUE)
            .withArgument("x-dead-letter-exchange", "")
            .withArgument("x-dead-letter-routing-key", QueueConstants.DEAD_LETTER_QUEUE)
            .build();
}

@Bean
Queue deadLetterQueue() {
    return QueueBuilder.durable(QueueConstants.DEAD_LETTER_QUEUE).build();
}

@Bean
DirectExchange exchange() {
    return new DirectExchange(QueueConstants.PROVISIONING_EXCHANGE);
}

@Bean
Binding binding() {
    return BindingBuilder.bind(organizationProvisioningQueue()).to(exchange()).with(QueueConstants.PROVISIONING_ROUTING_KEY);
}

和我的消息处理器:

@RabbitListener(queues = QueueConstants.PROVISIONING_QUEUE)
public void process(ProvisioningMessage message) throws ProvisioningException {
    System.out.println("Processing " + message);

    throw new ProvisioningException ("Some ex " + message);
}

和常量:

public static final String PROVISIONING_EXCHANGE = "provisioning-exchange";
public static final String PROVISIONING_ROUTING_KEY = "provisioning";
public static final String PROVISIONING_QUEUE = "provisioning-queue";

public static final String DEAD_LETTER_QUEUE = PROVISIONING_QUEUE + ".dlq";

死信队列不起作用,因为每次引发异常后都会重新排队消息,从而导致死循环,而不是进入死信队列。

由于已建议,但我也将队列名称也更改为以.dlq结尾,但仍然没有成功。我在做什么错?

java rabbitmq spring-rabbitmq spring-rabbit
1个回答
0
投票

您需要抛出AmqpRejectAndDontRequeueException或将侦听器容器的defaultRequeueRejected属性设置为false

dlq的名称无关紧要。

© www.soinside.com 2019 - 2024. All rights reserved.