1 tx事务模式
channel.txSelect(); //发送消息之前开启事务
-- 消息发送
channel.txCommit(); //提交事务
channel.txRollback ; // 异常是作 事务回滚
2 confirm 模式
简单channel.confrimSelect(); // 开启confirm 模式
-- 消息发送
channel.waitForConfirms(); // 通过 回调该方法 判断是否成功发送成功
异步
private static SortedSet<Long> confirmSet = Collections.synchronizedSortedSet(new TreeSet<Long>());
//定义一个全局集合来 存储 未发送成功得消息标识
channel.confrimSelect(); // 开启confirm 模式
channel.addConfirmListener(new ConfirmListener() { // 添加监听
@Override
public void handleAck(long deliveryTag, boolean multiple) throws IOException { // 确认的机制
if (multiple) {
confirmSet.headSet(deliveryTag + 1L).clear();
} else {
confirmSet.remove(deliveryTag);
}
}
@Override
public void handleNack(long deliveryTag, boolean multiple) throws IOException { // 不确认的机制处理
if (multiple) {
confirmSet.headSet(deliveryTag + 1L).clear();
} else {
confirmSet.remove(deliveryTag);
}
}
});
// 发送消息之前 先获取该消息得标识
long seqNo = channel.getNextPublishSeqNo();
-- 发送消息
// 将该消息存入到集合
confirmSet.add(seqNo);
知识点
/** 参数1:队列名称 参数2:是否持久化 参数3:是否自动删除 参数4:队列在什么时候被删除 **/
channel.queueDeclare(QUEUE_NAME, false, false,false,null);