2015-10-08 23 views
1

自1.5(AMQP-507)以來,我一直在使用Spring AMQP實現的「強制性」消息。現在,我想爲這些消息「窺探」一些目的,但似乎除了預期的消費者接收到這些消息之外,我真的不能擁有其他東西(因爲這將被視爲交付,因此發件人會不被通知)。我是否有其他選擇(由RabbitMQ本身或Spring AMQP提供)將這些消息「複製」到另一個隊列中,而不與EIP(SmartProxy或Wiretap)混淆?在Spring AMQP中偵測「強制性」消息

(當然,我所有的隊列被聲明爲「自動刪除」,讓這部作品如預期,這是什麼使這個難以完成的任務。)

回答

1

在客戶端

你可以使用攔截器。例如,如果您使用spring-rabbit項目中的SimpleMessageListenerContainer,則可以使用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錘。您將收到給定隊列中所有消息的副本。

如果您使用的是直接的交流,你可以它的類型更改爲主題的交流和使用路由「*」鍵綁定你的副本隊列,但它不會與「強制」語義」兼容。

相關問題