groovy 如何在RabbitMQ消息中添加x-delay头?

t8e9dugd  于 2022-11-01  发布在  RabbitMQ
关注(0)|答案(1)|浏览(178)

我尝试使用MessagePostProcessor的示例在我的消息上添加一个标头x-delay,但它给了我一个异常,说:
异常错误: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头,但是我如何才能在不引发这个异常的情况下添加呢?

bxgwgixi

bxgwgixi1#

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()
        }
    }
}

相关问题