赞
踩
RabbitMQ怎么保证消息的可靠性
交换机、队列、消息可以设置为持久化。
声明exchande 时设置持久化 (durable = true) 并且不自动删除(autoDelete = false)。
声明queue时设置持久化 (durable = true) 并且不自动删除(autoDelete = false)。
发送消息时通过设置deliveryMode=2 持久化消息。
消息持久化意味着当消息进入队列时,它将被写入磁盘而不是仅保存在内存中,broker重启之后持久化的消息会投递到原先的队列上。
在broker重启之后,持久化的交换机、队列会重新初始化。
在RabbitMQ中,你可以使用发布确认模式(Publisher Confirms)来确认消息是否已成功发送到Exchange。这可以通过在生产者端启用确认模式并监听确认回调来实现。如果消息成功投递到Exchange,RabbitMQ将发送一个确认回调(confirmCallback)。
RabbitMQ提供了消息确认机制(returnCallback),生产者可以等待来自RabbitMQ的确认消息,以确保消息已经成功发送到队列中。如果生产者没有收到确认消息,它可以选择重新发送消息。
消费者可以手动(关闭自动ack)发送确认消息(ack)给RabbitMQ来确认已成功处理消息。这样,RabbitMQ就知道可以安全地将消息标记为已传递,并从队列中删除它。如果消费者处理消息时发生错误,它可以选择拒绝消息(nack),这样消息将被重新放回队列中等待消费。
如果消息在传输过程中出现异常,RabbitMQ会自动进行消息重试,直到消息被正确地处理为止。可以通过设置重试次数和重试时间间隔来控制消息重试的行为。但是要保证消息幂等性,一个消息只能被消费一次。
RabbitMQ支持事务,你可以将多个发布操作包装在一个事务中。如果事务成功提交,所有的消息将被确认,否则它们将被回滚。然而,事务会降低吞吐量,性能下降250倍,因此只有在必要时才使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。