_phpstudy
2019-10-12 12:34
为了保证消息百分百投递, 在发送消息到 RabbitMQ 的同时,写入一份消息到 message 表.
然后消费者读取 RabbitMQ 的同时也要查询 message 表对应的消息.
我有点理解不了, 在这个设计中, 直接拿到 Rabbit 貌似都可以,理解不了意义在哪里.
借楼,感觉这个场景举例不是很好,既然我消费者能直接访问DB,并且也有个定时任务可以读取业务数据和MSG数据,那还需要RabbitMQ干嘛。我直接让生产者把消息放到MSG表,消费者定时任务访问MSG表获取消息处理,不用担心幂等,不用担心消息在MQ传递过程总出现的各种问题。?
如果一个消息成功产生了,但是因为生产者没有连接到exchange或者网络故障等 那么这个消息是不会保存到消息队列中去的,消费者也就无法对这个消息进行消费了,而案例中这个message表就能解决这个问题,就算在消息队列中没有这条消息记录也能在数据库的消息表中找到,并重新进行消费
消费者读取MQ的时候为什么需要拿去message表对应的消息?message表只是起到一个订单发送消息状态的记录作用 只是记录的作用,在拿去mq后手动确认消息签收后 这时候才回去更新message表对应的订单投递状态 即:0(发送中)->1(发送成功),如果说中间因为网络状态等等导致消费者这边没有签收确认这个消息,此时的订单消息状态还是0,这时候会有定时任务去轮询查取所有消息状态为0(发送中)的消息来resend。
RabbitMQ消息中间件极速入门与实战
42102 学习 · 143 问题
相似问题