在使用rabbitmq的时候,我们怎么保证发送的消息一定就成功到达了路由,有怎么保证路由里的消息成功到达了队列。
在rabbitmq中提供了这样的回调机制。
一:路由消息接收回调,在rabbitmq中提供了一个接口ConfirmCallback,里面的confirm方法提供了路由确认的各种参数,我们只需要写一个确认类实现这个接口
@Component
public class RabbitTemplateConfigimplements RabbitTemplate.ConfirmCallback {
@Autowired
private RabbitTemplaterabbitTemplate;
@PostConstruct
public void init(){
rabbitTemplate.setConfirmCallback(this);//指定 ConfirmCallback
}
@Override
public void confirm(CorrelationData correlationData,boolean ack, String cause) {
System.out.println("消息唯一标识:"+correlationData);
System.out.println("确认结果:"+ack);
System.out.println("失败原因:"+cause);
}
}
里面的返回信息说明了各个参数的意义
二:对应这路由确认,rabbitmq也提供了ReturnCallback类,来确认队列接收消息的回调
@Component
public class RabbitTemplateReturnConfigimplements RabbitTemplate.ReturnCallback {
@Autowired
private RabbitTemplaterabbitTemplate;
@PostConstruct
public void init(){
rabbitTemplate.setReturnCallback(this);//指定 ReturnCallback
}
@Override
public void returnedMessage(Message message,int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("消息主体 message : "+message);
System.out.println("消息主体 message : "+replyCode);
System.out.println("描述:"+replyText);
System.out.println("消息使用的交换器 exchange : "+exchange);
System.out.println("消息使用的路由键 routing : "+routingKey);
}
}
这样我们就可以监听到我们的消息在路由和队列中的发送状态了。
网友评论