RabbitMQ-如何在过期队列中死信/处理消息?

时间:2019-12-10 02:09:21

标签: rabbitmq

我有一个设置了byte[] HexToByte(String str) { int length = str.length(); byte[] bArr = new byte[(length / 2)]; for (int i = 0; i < length; i += 2) { bArr[i / 2] = (byte) ((Character.digit(str.charAt(i), 16) << 4) + Character.digit(str.charAt(i + 1), 16)); } return bArr; } String arg_1="IBbdPw=="; String arg_2="C6704D668D64DD012A86858C36F35D46F3"; String arg_3="58EB2DB3E1063FC93A"; decrypt(arg_1, HexToByte(arg_2.substring(0, 32)), HexToByte(arg_3.substring(0, 16))); 的队列。我遇到的问题是,我需要对队列已过期的队列中的消息进行进一步处理。 IF 我最初的想法是将x-expires设置在队列中。但是,当队列到期时,消息就消失了,而没有进入死信交换。

如何对即将到期的队列中的消息进行死信处理或以其他方式处理?

2 个答案:

答案 0 :(得分:1)

如注释中所建议,您不能仅依靠x-expire功能来做到这一点。但是在类似情况下可行的解决方案是:

  1. 使用x-message-ttl来确保如果不及时使用消息,消息就会消失
  2. 将死信交换分配给将所有这些消息路由到的队列,
  3. 使用x-expires将队列过期设置为高于消息TTL的值,
  4. (这是棘手的部分)假设您已经控制了使用者,那么在最后一个使用者脱机之前,可以通过https://github.com/google/flexbox-layout删除到“垂死”队列的绑定-这样可以防止出现新消息不会被路由到队列。

通过这种方式,已经处理了最后一个使用者死亡之前发布的消息,现有消息将在队列到期之前被死信化,并且新消息无法进入队列。

答案 1 :(得分:0)

您需要添加一个新的死信队列,该队列绑定到您的死信交换,并且绑定路由键设置为原始队列名。这样,所有发送到死信交换机的过期邮件都将路由到死信队列。