赞
踩
存在一个问题:当生产者将消息发送出去之后,如何去确认消息到底有没有到达服务器。
这边先介绍事务机制。
模型图:
try {
channel.txSelect();
channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY,false, properties, message.getBytes());
channel.txCommit();
} catch (Exception e) {
e.printStackTrace();
channel . txRollback();
}
事务回滚:当发生异常未能执行channel.txCommit();执行channel . txRollback();即可回滚
模型图:
try {
channel.txSelect();
channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY,false, properties, message.getBytes());
int i = 1/0;
channel.txCommit();
} catch (Exception e) {
e.printStackTrace();
channel . txRollback();
}
1.发送多条消息时,只要用channel.txSelect();channel.txCommit();将发送消息包裹起来即可
2.只有消息成功被RabbitMQ 接收,事务才能提交成功,否则便可在捕获异常之后进行事务回滚,与此同时可以进行消息重发。
3.但是使用事务机制会"吸干" RabbitMQ所以RabbitMQ提供了一个改进方案,即发送方确认机制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。