在日常开发中如何保证使用Rabbitmq 的时候,生产者和消费者不丢失数据?

提问者:帅平 问题分类:消息队列
在日常开发中如何保证使用Rabbitmq 的时候,生产者和消费者不丢失数据?
5 个回答
自愈
自愈
消费者的话需要启动 ack 机制,也就是消息如果被正确处理,则手动进行 ack,如果没有被正确处理,则不能进行 ack 操作。
发布于:3个月前 (03-07) IP属地:未知
去
从运维的角度来说,rabbitmq 需要配置为镜像的模式,避免服务器单点故障造成消息丢失
发布于:3个月前 (03-07) IP属地:未知
怕她脏还是爱她葬
怕她脏还是爱她葬
在生产者端配置消息持久化,需要设置:
Exchange 设置持久化
Queue 设置持久化
Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息
发布于:3个月前 (03-07) IP属地:未知
我是蓝天
我是蓝天
生产者端还可以使用 confirm 机制,例如:
//开启confirm  
channel.confirm();  
//发送成功回调  
public void ack(String messageId){
}
// 发送失败回调  
public void nack(String messageId){  
    //重发该消息  
}
发布于:3个月前 (03-07) IP属地:未知
望北海
望北海
生产者端可以开启提交事务,例如:
// 开启事务  
channel.txSelect();  
//发送
doSomething()
// 提交事务  
channel.txCommit();
发布于:3个月前 (03-07) IP属地:未知
我来回答