MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

从入门到精通!RabbitMQ 全方位进阶攻略 - 每日一题(3)

2025-05-16 13:38 huorong 精选文章 2 ℃ 0 评论

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添加用户

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言