在Spring AMQP中监视“强制”消息

时间:2015-10-08 10:43:36

标签: spring-amqp

自从1.5(AMQP-507)以来,我一直在使用Spring AMQP实现的“强制”消息。现在,我想出于多种目的“窥探”这些消息,但似乎我不能真正拥有除了预期的消费者接收这些消息之外的东西(因为这将被视为交付而发送者因此没有得到通知)。我是否有任何替代方案(由RabbitMQ本身或Spring AMQP提供)将这些消息“复制”到另一个队列而不会弄乱EIP(SmartProxy或Wiretap)?

(当然,我的所有队列都被声明为“自动删除”,因此这可以按预期工作,这就是使这更难完成的原因。)

1 个答案:

答案 0 :(得分:1)

在客户端

你可以使用拦截器。例如,如果您使用SimpleMessageListenerContainer项目中的spring-rabbit,则可以使用Advice或邮件处理器adviceChain使用MessagePostProcessor

例如using the example given on the main page

SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf);
container.setAfterReceivePostProcessors(new MessagePostProcessor() {
                @Override
                public Message postProcessMessage(Message message) throws AmqpException {
                    return null;
                }
            });

在rabbitmq方面

firehose锤子。您将收到给定队列中所有消息的副本。

如果您使用直接交换,您可以将其类型更改为主题交换并使用路由键“*”绑定您的复制队列,但它与“强制”语义不兼容“。