应用重启rabbitmq消息发送丢失 (解决方法与步骤)
下面内容仅为某些场景参考,为稳妥起见请先联系上面的专业技术工程师,具体环境具体分析。
2023-09-19 23:14 123
当应用重启时, RabbitMQ 客户端通常会重新建立连接,并且会根据之前的连接状态来决定如何处理未发送的消息。
如果你使用了 RabbitMQ 的持久化特性,即通过将消息标记为持久化来确保消息在服务器重启后不会丢失,那么在应用重启后, RabbitMQ 会尝试重新发送所有未确认的消息。你只需要确保在发送消息之前,将消息标记为持久化。
你可以使用事务或 Confirm 模式来确保消息的可靠性。在事务模式下,你可以将消息发送放在一个事务中,只有当事务提交成功后,消息才会被 RabbitMQ 所接收并传递给消费者。如果事务提交失败,消息将会回滚。
在 Confirm 模式下,你可以通过调用 channel.confirmSelect() 来启用 Confirm 模式,在发送消息后,如果 RabbitMQ 成功接收到消息,将会返回一个确认。如果消息的确认未收到,你可以选择重发消息,或者根据你的需求进行相应的处理。
要确保应用重启时 RabbitMQ 消息发送的可靠性,你可以使用持久化特性、事务模式或 Confirm 模式。选择哪种方式取决于你的应用需求和性能要求。