Only one ConfirmCallback is supported by each RabbitTemplate 如何解决
时间: 2023-10-17 19:31:19 浏览: 122
在RabbitTemplate中,确实只支持一个ConfirmCallback,但是可以通过自定义ConfirmCallback的实现来实现多个业务场景下的ConfirmCallback的处理。具体的实现方法如下:
1. 自定义ConfirmCallback的实现,例如:
```
public class MyConfirmCallback implements RabbitTemplate.ConfirmCallback{
private String bizType;
public MyConfirmCallback(String bizType) {
this.bizType = bizType;
}
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
System.out.println(bizType + " message confirm success,correlationData:" + correlationData);
} else {
System.out.println(bizType + " message confirm fail,correlationData:" + correlationData+",cause:"+cause);
}
}
}
```
2. 在发送消息时,设置不同的CorrelationData和ConfirmCallback,例如:
```
// 发送消息1
rabbitTemplate.convertAndSend("exchange1", "routingKey1", "message1", new CorrelationData(UUID.randomUUID().toString()), new MyConfirmCallback("bizType1"));
// 发送消息2
rabbitTemplate.convertAndSend("exchange2", "routingKey2", "message2", new CorrelationData(UUID.randomUUID().toString()), new MyConfirmCallback("bizType2"));
```
这样,在发送不同的消息时,可以设置不同的CorrelationData和ConfirmCallback,从而实现多个业务场景下的ConfirmCallback的处理。
阅读全文