RabbitMQ相关总结

//connection
//channel 

//broke
//exchange:fanout、 dirct、 topic(*:一个单词、#:多个单词)、 header
//queue
//bind(exchange,queue,routingkey)

//一、如何保证消息不丢失
//生产者发布消息时 设置消息持久化(Persistent:true)、设置确认模式(DeliveryMode:2)
//声明交换机时设置持久化(durable:true)
//声明队列时声明持久化(durable:true)
//消费者消费消息时关闭自动应答(autoAck:false)

//二、实现延迟队列
//声明队列时设置队列消息过期时间TTL(x-message-ttl)或者发布消息时设置消息过期时间TTL(Expiration)
//配置死信队列
//当消息没有消费者过期时会进入死信队列,再消费死信队列中的消息可实现延迟队列的效果

//三、进入死信队列条件
//配置了死信队列
//消息被拒、过期、超过队列长度

//四、消费者2种消费模式
//Push(BasicConsume)、Pull(BasicGet)

//五、如何保证消息不重复消费
前提:生产者产生消息时带一个唯一ID
方案一、将唯一ID设置为数据库表的唯一索引,通过数据库唯一索引保证消费端幂等性(适用于新增场景)
方案二、使用Redis+TTL+消费状态(过期时间)
方案三、使用数据库+补偿机制(数据库存唯一ID、消费状态、消费次数),定时任务自动处理消费多少次的任务

-->(特殊情况,比如消费完成没有更新消费状态)消费次数>N次,则人工介入做补偿
-->插入失败-->(已消费直接返回成功、消费中则拒收进入延迟队列)
插入消费记录(消费中、消费次数)-->插入成功-->执行业务-->执行成功-->修改消费记录状态为成功 -->执行失败-->删除消费记录-->重新投递
//六、开启手动应答模式后 //BasicAck()、BasicNAck、BasicReject

 

 

posted @ 2024-06-05 22:29  DaiWK  阅读(9)  评论(0编辑  收藏  举报