有沒有更改發佈商確認每條消息的方法?我們有一個接收消息併發布到RabbitMQ的休息層。根據某些消息屬性,我們決定是否需要發佈商確認。spring-amqp RabbitMQ動態更改發佈商確認
有沒有辦法重寫,發佈者確認發送消息?
有沒有更改發佈商確認每條消息的方法?我們有一個接收消息併發布到RabbitMQ的休息層。根據某些消息屬性,我們決定是否需要發佈商確認。spring-amqp RabbitMQ動態更改發佈商確認
有沒有辦法重寫,發佈者確認發送消息?
否;我們必須添加一堆腳手架來支持回報。此外,頻道被緩存,無法關閉確認一旦設置的頻道。我們必須保留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;
}
}
感謝加里,這是我發佈前的嘗試,但遇到了問題。我們如何爲每個ConnectionFactory使用不同的配置屬性集?有沒有樣品可用。我正在使用Java Config – basu76
我不確定你有什麼「問題」,但我添加了一個示例引導應用程序,它對我來說工作正常。 –
如何不理會那些某些消息確認? –
一旦建立連接,即使您忽略確認,確認消息的費用仍然存在。正如@加里建議,我試圖使用2個連接 – basu76