我使用 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/