2016-12-13 61 views
0

有沒有更改發佈商確認每條消息的方法?我們有一個接收消息併發布到RabbitMQ的休息層。根據某些消息屬性,我們決定是否需要發佈商確認。spring-amqp RabbitMQ動態更改發佈商確認

有沒有辦法重寫,發佈者確認發送消息?

+0

如何不理會那些某些消息確認? –

+0

一旦建立連接,即使您忽略確認,確認消息的費用仍然存在。正如@加里建議,我試圖使用2個連接 – basu76

回答

0

否;我們必須添加一堆腳手架來支持回報。此外,頻道被緩存,無法關閉確認一旦設置的頻道。我們必須保留2個不同的緩存。

如果您希望使用條件確認,您可以定義兩個連接工廠(和模板),一個啓用確認,一個不確定,並選擇在運行時使用哪個模板。

編輯

@SpringBootApplication 
public class So41131612Application { 

    public static void main(String[] args) throws Exception { 
     ConfigurableApplicationContext context = SpringApplication.run(So41131612Application.class, args); 
     context.getBean("normalTemplate", RabbitTemplate.class).convertAndSend("foo", "foo"); 
     context.getBean("confirmingTemplate", RabbitTemplate.class).convertAndSend("", "foo", "foo", 
       new CorrelationData("foo")); 
     Thread.sleep(2000); 
     context.getBean(RabbitAdmin.class).deleteQueue("foo"); 
     context.close(); 
    } 

    @Bean 
    public Queue foo() { 
     return new Queue("foo"); 
    } 

    @Bean 
    @Primary 
    public CachingConnectionFactory rabbitConnectionFactory() { 
     return new CachingConnectionFactory("localhost"); 
    } 

    @Bean 
    public CachingConnectionFactory confirmingCf() { 
     CachingConnectionFactory cf = new CachingConnectionFactory("localhost"); 
     cf.setPublisherConfirms(true); 
     return cf; 
    } 

    @Bean 
    public AmqpTemplate normalTemplate(@Qualifier("rabbitConnectionFactory") CachingConnectionFactory normalCf) { 
     return new RabbitTemplate(normalCf); 
    } 

    @Bean 
    public AmqpTemplate confirmingTemplate(@Qualifier("confirmingCf") CachingConnectionFactory confirmingCf) { 
     RabbitTemplate rabbitTemplate = new RabbitTemplate(confirmingCf); 
     rabbitTemplate.setMandatory(true); 
     rabbitTemplate.setConfirmCallback((cd, ack, cause) -> { 
      System.out.println("Correlation:" + cd + " ack: " + ack); 
     }); 
     return rabbitTemplate; 
    } 

} 
+0

感謝加里,這是我發佈前的嘗試,但遇到了問題。我們如何爲每個ConnectionFactory使用不同的配置屬性集?有沒有樣品可用。我正在使用Java Config – basu76

+0

我不確定你有什麼「問題」,但我添加了一個示例引導應用程序,它對我來說工作正常。 –