使用xml配置拦截Spring Rabbitmq中传入的消息

问题描述 投票:0回答:1

我需要拦截来自 RabbitMQ 的每条传入消息,从中提取一些特定的标头并将其放入线程上下文中。我在互联网上看到了不同的解决方案,但它们与代码配置一起使用,而我有 xml 配置并且无法更改它。 这是我的配置:

<bean id="eventPublisherService"
        class="...">
    ...
  </bean>

  <rabbit:connection-factory id="connectionFactory"
                             host="${queuing.connection.host}" virtual-host="${queuing.connection.virtualHost}"
                             username="${queuing.connection.username}" password="${queuing.connection.password}"/>

  <rabbit:admin connection-factory="connectionFactory"/>


  <rabbit:queue name="${some.queue}"/>
  ... more queues

  <rabbit:template id="amqpTemplate"
                   connection-factory="connectionFactory" channel-transacted="true"/>

  <bean id="mailingConsumer" class="..."/>
  ... more beans

  <rabbit:listener-container connection-factory="connectionFactory" advice-chain="retryAdvice">
    <rabbit:listener ref="mailingConsumer" queue-names="${...}" id="mailingConsumerId"/>
    ... more listeners
  </rabbit:listener-container>

我尝试使用 MessagePostProcessor,但我不确定如何将其集成到现有的设置中。

java xml spring rabbitmq spring-rabbit
1个回答
0
投票

是的。

<rabbit:listener-container>
不会公开
setAfterReceivePostProcessors()
的属性。

你可以通过

advice-chain
来实现这一点。我看到你已经设置了
retryAdvice
。因此,在调用
MethodInterceptor
之前实现一个
invocation.proceed()
并设置所需的线程上下文。

您可以考虑使用

ListenerContainerFactoryBean
作为
<bean>
定义,而不是
<rabbit:listener-container>

© www.soinside.com 2019 - 2024. All rights reserved.