我使用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());