1、消息确认机制(confirm)
为了确保消息能够准确的发送到Broker中,RabbitMQ提供了消息确认机制。
当生产者发送消息之后,如果Borker准确收到消息,则会返回给生产者一个应答。生产者通过接收到的应答判断消息是否成功发送。
confirm机制的实现
1、通过channel开启confirm机制
2、在channel上添加监听器接受broker返回的应答信息
//开启confirm机制
channel.confirmSelect();
//添加一个确认监听
channel.addConfirmListener(new ConfirmListener() {
@Override //消息成功发送时执行
public void handleAck(long deliveryTag, boolean multiple) throws IOException {
log.info("消息成功发送");
}
@Override //消息发送失败时执行
public void handleNack(long deliveryTag, boolean multiple) throws IOException {
log.info("消息发送失败");
}
});
2、return机制
return机制处理的是消息不能到达队列的情况,比如:路由没有指定的key。
生产者在发送消息之后,交换机通过指定的路由键来指定消息发送的队列,在某些情况下,消息发送到队列失败,这是需要监听不可达消息需要return机制来实现。
//添加return监听器
channel.addReturnListener(new ReturnListener() {
@Override
public void handleReturn(int replyCode, String replyText, String exchange,
String routingKey, AMQP.BasicProperties properties,
byte[] body) throws IOException {
log.info("---------handle return----------");
log.info("响应码replyCode: {}", replyCode);
log.info("文本信息replyText: {}", replyText);
log.info("exchange: {}", exchange);
log.info("routingKey: {}", routingKey);
log.info("properties: {}", properties);
log.info("body: {}" ,new String(body));
}
});