已过期RabbitMQ时间

时间:2014-11-12 15:09:03

标签: rabbitmq amqp

我使用RabbitMQ进行延迟消息处理。对于实现,我使用两个队列 - WorkQueue和WaitQueue。首先,消息被放入WaitQueue并且有一些过期时间。在这段时间之后,应该去WorkQueue。但它不起作用。 如果我输入2条消息:过期时间为1分钟10分钟。在这种情况下,两条消息都在10分钟后发送。这是正确的行为吗?

队列创建:

channel.queueDeclare(Config.getInstance().getRabbitmqWorkQueue(), true, false, false, null);
channel.queueBind(Config.getInstance().getRabbitmqWorkQueue(), Config.getInstance().getRabbitmqWorkExchange(), "");
Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", Config.getInstance().getRabbitmqWorkExchange());
channel.exchangeDeclare(Config.getInstance().getRabbitmqWaitExchange(), "direct");
channel.queueDeclare(Config.getInstance().getRabbitmqWaitQueue(), true, false, false, args);
channel.queueBind(Config.getInstance().getRabbitmqWaitQueue(), Config.getInstance().getRabbitmqWaitExchange(), "");

发送消息:

channel.basicPublish(Config.getInstance().getRabbitmqWaitExchange(), "",
    new AMQP.BasicProperties.Builder()
    .deliveryMode(1)
    .expiration(String.valueOf(delay))
    .build(), ByteBuffer.allocate(8).putLong(event.getId()).array());

1 个答案:

答案 0 :(得分:2)

虽然消费者永远不会看到过期的消息,但只有当过期的消息到达队列的头部时,它们才会被丢弃(或死信)。 (c)documentation