在Spring Boot中的一条AMQP消息的上下文中注入作用域bean



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

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

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

通过所有调用的方法传递这些数据感觉很难看。

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

  • AOP
  • 自定义作用域

非常感谢您的帮助!

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

/**
* 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来存储元数据;然后可以访问侦听器中的元数据。

最新更新