rabbitmq - RabbitMQ 中的过期时间

标签 rabbitmq amqp

我使用 RabbitMQ 进行延迟消息处理。对于实现,我使用两个队列 - WorkQueue 和 WaitQueue。首先,消息被放入具有一定过期时间的 WaitQueue 中。过了这个时间,它应该进入工作队列。但这不起作用。 如果我放 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());

最佳答案

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

关于rabbitmq - RabbitMQ 中的过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890138/

相关文章:

java - 同时使用 ActiveMQ 和 RabbitMQ

python - 很难启动 Rabbitmq Server 并想知道为什么不断收到此错误 init :do_boot/3 line 817

NestJS 中的 RabbitMQ,生产者和消费者都出错

amqp - DDS vs AMQP vs ZeroMQ

java - 在 Qpid Proton AMQP 1.0 客户端库中设置连接的 `max_frame_size`

python - 用于开发和模拟的 Lite Python AMQP 服务器实现?

python - Django 任务、提醒、通知

rabbitmq - 在 RabbitMQ 主题交换中路由与模式不匹配的消息

java - 使用 AMQP 的 Azure 服务总线事务

java - 如何使用Java获取rabbitmq中声明的交换和队列列表?