消息确认模式
在默认情况下,生产者把消息发送出去后,broker是不会返回任何消息给生产者的.也就是说生产者也不知道消息有没有正确到达.如果消息到达前broker发生宕机,或者消息写入磁盘前宕机,消息就发生丢失.消息持久化机制是没有办法解决这个问题的,RabbitMQ提供两种办法解决这种情况,第一种是AMQP的事务机制,二是把信道设置成确认模式.
在AMQP中把信道设置成事务模式后,生产者和Broker之间会有一种发送/响应机制判断当前命令操作是否可以继续,不过事务模式需要生产者应用同步等待broker的执行结果,在性能上会极大降低消息服务的吞吐量,解决方案偏重了点.一般不建议使用事务模式,二十采用性能更好的发送方确认(publisher confirm)模式来保证消息投递.
发送方确认模式是rabbitmq对AMQP协议的拓展实现,把信道设置成确认模式后,该信道上发布的所有消息都会分配一个唯一的id,一旦消息一旦消息投递到所匹配的队列中,信道就会像生产者发送确认消息.从而让生产者知道消息已经到达目的队列.发送方确认模式最大的优势就是异步,生产者发送一条消息后可以继续发送下一条消息,生产者收到确认消息后调用回调方法处理.轻便并且性能影响小.