我需要从三点去考虑,
- 生产者弄丢了数据,生产者将消息发送的Exchange并且路由到队列
- 队列需要将消息给它持久化
- 消费者要成功消费队列中的消息
针对生产者:
RabbitMQ提供了confirm机制,保证了消息消息发送的Exchange交换机,那么还提供了return机制,可以保证消息从exchange路由到队列中,如果发送失败或者是路由失败时它会提供一个回调函数,可以做重试或者是一些补偿机制,
针对队列做持久化
只需要在发送消息之前,给消息BasicProperties 中的 deliveryMode 属性设置为 2,那么这样呢,即便RabbitMQ重启消息也不会丢失
针对消费者
他需要开启手动ack,在消息被成功消费后呢,需要手动的基于channel执行a ck,那保证消息是可以被正常消费。
版权归原作者 伏加特遇上西柚 所有, 如有侵权,请联系我们删除。