我有一个问题与rabbitMQ配置。我想转发所有消息从队列到另一个队列后20分钟rabbitListener(失去网络连接或有人关闭应用程序)关闭。
我试着这样做(在Spring):
@Configuration public class RabbitMqConfig {
...
@Bean public Queue deadQueue(){
return new Queue("dead_letter_queue", true, false, false);
}
@Bean
public Binding deadQueueBinding(){
Binding binding = new Binding(
"dead_letter_queue",
Binding.DestinationType.QUEUE,
"dlx_exchange",
"dlx_key",
null
);
return binding;
}
...
}
@Service
public class QueueManagerService {
...
public void createQueue(String queueName) {
Map<String, Object> args = new HashMap<>();
args.put("x-max-priority", 10);
args.put("x-expires", 30000);
args.put("x-dead-letter-exchange", "dlx_exchange");
args.put("x-dead-letter-routing-key", "dlx_key");
Binding binding = new Binding(
queueName,
Binding.DestinationType.QUEUE,
"exchange4allQueuesName",
queueName, //routingKey dajemy ten sam jaki nazwa kolejki
null
);
rabbitAdmin.declareQueue(new Queue(queueName, true, false, false, args));
rabbitAdmin.declareBinding(binding);
}
...
}
看起来参数"x-expires"不能与参数"x-dead-letter-exchange"和"x-dead-letter-routing-key"一起使用。我需要一些建议或其他方法来转发队列中的消息。
我不能也不想在每条消息上使用参数"x-message-ttl",因为消息可能在队列中等待甚至1小时(消耗一条消息需要几秒钟)
1条答案
按热度按时间omqzjyyz1#
参见本文档:https://www.rabbitmq.com/dlx.html
注意,队列的过期不会使其中的消息成为死信。
因此,我们确实不能从过期队列中DLX消息。考虑在队列定义中使用
x-message-ttl
而不是x-expires
。