网站首页 > 精选文章 / 正文
RabbitMQ如何处理未被消费者确认的消息
消费者代码中需要启用消息确认机制(manual acknowledgment),通过channel.basic_ack手动确认消息处理完成
如果消费者没有发送basic_ack(比如消费者宕机或消息处理异常),消息会被再次发送给下一个可用的消费者。这时RabbitMQ会把消息的deliver tag返还给queue.以保证消息被再次处理
RabbitMQ中的虚拟主机(vhost)
概念:RabbitMQ主要是起到一个隔离的作用,每个虚拟主机可以拥有自己独立的队列、交换机、绑定、权限等资源,这样多个相互独立的应用可以共存一台RabbitMQ而互不影响
资源隔离:每个虚拟主机可以拥有自己独立的队列、交换机等,这些资源在不同的vhost中互不干扰
安全控制:通过对vhost的不同用户角色进行权限管理
管理便捷:使多租户应用管理更加便捷,在同一个RabbitMQ实例上运行多个独立应用
RabbitMQ如何实现消息路由,常见的路由策略
概念:RabbitMQ通过交换机来实现消息路由,而不是将消息发送到队列。交换机的主要职责是接收生产者发送的消息并根据特定的策略(路由键)将这些消息路由到一个或多个队列中。交换机的类型和绑定规则决定了消息的具体流向
RabbitMQ常见的路由策略
1.Direct交换机:消息通过完全匹配路由键进行路由
2.Fanout交换机:广播消息到所有绑定的队列,不需要路由键
3.Topic交换机:根据路由键模式匹配进行路由
4.Headers交换机:根据消息头属性进行路由
如何在RabbitMQ中处理消息的重复消费问题
1.消息幂等性:确保消息处理方法是幂等的,处理相同的消息多次不会导致不同的结果
2.消息确认机制:消费者在处理完消息后,向RabbitMQ发送一个确认(ack)
3.消息持久化与日志记录:将已处理的消息记录在数据库或者redis中。在处理新消息是否已被处理过,避免重复处理
4.使用唯一消息id:每个消息都带上唯一id,当消息处理时,首先检查这个id是否已经处理过,如果是则跳过
Tags:rabbitmq添加用户
猜你喜欢
- 2025-05-16 RabbitMQ消息中间件的应用实践与深度解读
- 2025-05-16 rabbitmq 断电后无法启动了,你了解吗
- 2025-05-16 从入门到精通!RabbitMQ 全方位进阶攻略 - 每日一题(2)
- 2025-05-16 RabbitMQ 延迟消息实战
- 2025-05-16 RabbitMQ:消息中间件里的“邮递员”大师