RabbitMq
追逐影子
99世界,我的
展开
-
RabbitMq:如何防止mq重复消费消息?
为了保证消息不重复消费,生产者可以给每条消息配置一个全局唯一id,在消费端可以将生产者发送的mq消息的id存在数据库或者redis中,每次消费之前检查数据库中。将id存在list中,并且设置过期时间。(需要注意的是如果redis过期时间小于服务器宕机时间,而且没有持久化消息的情况就会导致消息丢失)将id存入string中,以queueName为key,id为value。缺点:一但数据量大的时候,占用redis内存,需要清理数据。是否存在消息id,如果不存在则直接消费,否则跳过这条消息。原创 2024-08-30 15:56:32 · 263 阅读 · 0 评论 -
RabbitMQ:如何确保消息不丢失?
1,生产者开启mq事务(channel.txSelect)。如果发送不成功则会报错,此时可以通过事务来回滚(channel.txRollback),成功收到消息则事务提交(channel.txCommit)。因为生产者事务是同步的机制,当事务提交后会阻塞在那儿,当吞吐量上来后这种方式会影响性能。2,开启生产者确认机制。使用confirm机制,confirm是异步形式。生产者发送消息时会给消息添加一个ia,当生产者成功发送消息到mq时,mq会返回一个ack给生产者,生产者收到ack说明。原创 2024-08-30 15:53:21 · 963 阅读 · 0 评论