【问题标题】:How to add x-delay header on RabbitMQ message?如何在 RabbitMQ 消息上添加 x-delay 标头?
【发布时间】:2022-08-11 05:00:14
【问题描述】:

我正在尝试使用 MessagePostProcessor 的实例在我的消息上添加标题 x-delay 但它给了我一个例外说:

java.lang.UnsupportedOperationException:MessageHeaders 是不可变的

import org.springframework.messaging.Message
import org.springframework.messaging.core.MessagePostProcessor
import org.springframework.stereotype.Component

@Component
class AmpqRoutingKeyStrategy {

    private static CUSTOM_DELAY = 120000

    MessagePostProcessor get() {
        return withDelay(CUSTOM_DELAY)
    }

    static MessagePostProcessor withDelay(Integer milliSeconds) {
        return new MessagePostProcessor() {
            @Override
            Message postProcessMessage(Message message) {
                message.getHeaders().put(\'x-delay\', milliSeconds)
                return message
            }
        }
    }
}

上面的例子在很多关于这个主题的文章中都有使用,我知道我们可以选择添加 x-delay 标头,但是我怎样才能在不引发这个异常的情况下做到这一点呢?

    标签: java groovy rabbitmq


    【解决方案1】:

    documentation 说:

    重要提示:这个类是不可变的。任何变异操作,例如 put(..)、putAll(..) 和其他操作都会抛出 UnsupportedOperationException。

    解决方案是重新创建消息:

    static MessagePostProcessor withDelay(Integer milliSeconds) {
        return new MessagePostProcessor() {
            @Override
            Message postProcessMessage(Message message) {
                return org.springframework.messaging.support.MessageBuilder
                    .fromMessage(message)
                    .setHeader("x-delay", milliseconds)
                    .build()
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多