工作原理

exchange
direct exchange fanout exchange topic exchange header exchange
工作模式
simple work queues publish/subscribe topics
消息持久化需做到三点
Exchange 设置持久化 Queue 设置持久化 Message 持久化发送:发送消息设置发送模式 deliveryMode=2,代表持久化消息
amqp
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
问题方案
1、 防止消息重复消费: 消息幂等性:确保消费者的处理逻辑具备幂等性,即多次处理相同的消息不会产生额外的影响。这样即使消息被重复消费,也不会导致不一致状态。 消息去重:使用消息去重机制来检查已经处理过的消息,避免重复处理。例如,维护一个消息ID的集合,在消费者端检查接收到的消息ID是否已存在于集合中。 消息确认机制:确保消息在被消费者成功处理后才被标记为已消费。这可以减少消息的重复传递。RabbitMQ提供了消费者应答(ack)机制,只有在消息被成功处理后才发送ack,否则RabbitMQ会重新将消息放入队列。
2、防止消息丢失: 持久化消息:将消息的delivery_mode设置为2,表示将消息持久化到磁盘上。这样即使RabbitMQ服务器重启,消息也不会丢失。 消息确认机制:在消费者端开启消息确认机制,确保消息被正确处理后才发送ack。如果消费者在处理消息时崩溃,RabbitMQ会将未确认的消息重新放回队列,等待其他消费者处理。 发送消息时开启事务:确保消息成功发送到RabbitMQ服务器。如果事务提交成功,消息就会被发送到消息队列中;如果事务回滚,消息就会被丢弃。 设置备份交换机:当消息无法被路由到目标队列时,可以将其发送到备份交换机中,以防止消息丢失。
3、确保消息的顺序性: 使用单个消费者:让单个消费者处理队列中的所有消息,这样可以确保消息按照它们进入队列的顺序被处理。但这种方法在处理大量消息时可能会成为性能瓶颈。 使用锁机制:防止多个消费者同时访问同一消息,但可能增加系统的复杂性和开销。 结合使用事务:在事务期间,消费者会锁定消息,进行一些处理,然后提交事务。如果事务失败,消息将被回滚到队列中
开箱即用;优先级队列;延迟队列;死信队列;消息重试;消息回溯;消息堆积 + 持久化;消息跟踪;消息过滤;消息顺序性;安全机制;消息幂等性;事务性消息等。
