自从1.5(AMQP-507)以来,我一直在使用Spring AMQP实现的“强制”消息。现在,我想出于多种目的“窥探”这些消息,但似乎我不能真正拥有除了预期的消费者接收这些消息之外的东西(因为这将被视为交付而发送者因此没有得到通知)。我是否有任何替代方案(由RabbitMQ本身或Spring AMQP提供)将这些消息“复制”到另一个队列而不会弄乱EIP(SmartProxy或Wiretap)?
(当然,我的所有队列都被声明为“自动删除”,因此这可以按预期工作,这就是使这更难完成的原因。)
答案 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锤子。您将收到给定队列中所有消息的副本。
如果您使用直接交换,您可以将其类型更改为主题交换并使用路由键“*”绑定您的复制队列,但它与“强制”语义不兼容“。