在 Spring Boot 中的一个 AMQP 消息的上下文中注入范围 bean

Injecting scoped beans in the context of one AMQP message in Spring Boot

使用 Spring Boot 编写 Web 应用程序时,您可以将 bean 声明为会话或请求范围的一部分。

是否可以使用@RabbitListener 接收到的消息创建一个数据注入范围?

当使用 RabbitListener 接收消息时,我想初始化一些元数据,我希望这些元数据可用于在消息处理期间调用的代码中注入。 (例如,用于日志记录的接收队列,或配置取决于消息接收时已知参数的预配置工厂)。

通过所有调用的方法传递此数据感觉很丑陋。

能想到但不知道怎么做的方法:

非常感谢帮助!

可能最简单的方法是使用 MessagePostProcessor(通过 afterReceivePostProcessors 属性 添加到 container/container 工厂)。

    /**
     * Set {@link MessagePostProcessor}s that will be applied after message reception, before
     * invoking the {@link MessageListener}. Often used to decompress data.  Processors are invoked in order,
     * depending on {@code PriorityOrder}, {@code Order} and finally unordered.
     * @param afterReceivePostProcessors the post processor.
     * @since 1.4.2
     */
    public void setAfterReceivePostProcessors(MessagePostProcessor... afterReceivePostProcessors) {
        Assert.notNull(afterReceivePostProcessors, "'afterReceivePostProcessors' cannot be null");
        Assert.noNullElements(afterReceivePostProcessors, "'afterReceivePostProcessors' cannot have null elements");
        this.afterReceivePostProcessors = MessagePostProcessorUtils.sort(Arrays.asList(afterReceivePostProcessors));
    }

使用ThreadLocal来存储元数据;然后您可以访问侦听器中的元数据。