RabbitMQ,为应对消息从发送到消费,各个环节消息丢失的解决方案

 
1、发送方   为保证消息到达exchange,在这个过程中不丢失。  用事务或者发送方确认机制  见《RabbitMQ实战指南》4.8节
2、为保证消息不会因为到达exchange后,无法路由到任何一个队列而丢失
      解决方案一:发送方发送消息时 令mandatory参数=true,用ReturnListener异步接收没有任何队列接收而返回给发送方的消息。  见《RabbitMQ实战指南》4.1.1节
      解决方案二:给exchange指定一个备份交换器及对应队列,到达交换器的消息如何无法路由到任何队列,就路由到备份交换器及对应的队列上  见《RabbitMQ实战指南》4.1.3节
3、为防止队列中消息被丢弃:
      情况一  消费消息设置了手动确认模式,被消费的消息被消费端拒绝,而且设置requeue=false,消息被丢弃
      情况二  有过期时间的消息或者设置了过期时间的队列,在到达过期时间后,消息被丢弃
      情况三  队列达到最大长度
      解决方案:设置死信队列,接收被丢弃的队列   见《RabbitMQ实战指南》4.3节
4、为防止由于服务器重启,导致队列中消息丢失。  使用持久化   见《RabbitMQ实战指南》 4.4节
5、为防止消息端在消息消息的过程中,消息丢失
       消息端设置手动确认收到消息   见《RabbitMQ实战指南》3.5节
6、以上情况,都是基于RabbitMQ节点,不会出现故障的解决方案。
    为应对节点故障,1、建立RabbitMQ集群。保证节点故障时,其他节点可以正常使用。
                                     唯一丢失的是故障节点的队列及队列上的消息,exchange与此队列的绑定,消费端与此队列的绑定  见《RabbitMQ实战指南》7.1节
                     2、为应对上面这种情况,设置 镜像队列   见《RabbitMQ实战指南》 9.4节

猜你喜欢

转载自www.cnblogs.com/dairongsheng/p/9374835.html