当前位置: 首页 > wzjs >正文

邢台哪儿专业做网站前端做网站使用的软件工具

邢台哪儿专业做网站,前端做网站使用的软件工具,建设网站五个步骤,lnmp一键安装包 wordpress思考可以保证消费不被重复消费,因为通过轮询一个消息只会投递给一个消费者。但是不是一个消费者消费,而是多个轮询消费在 RabbitMQ 中,如果多个消费者(Consumers)同时订阅 同一个队列(Queue)&am…

思考

可以保证消费不被重复消费,因为通过轮询一个消息只会投递给一个消费者。

但是不是一个消费者消费,而是多个轮询消费


在 RabbitMQ 中,如果多个消费者(Consumers)同时订阅 同一个队列(Queue),并且这个队列是通过 Direct Exchange 绑定的(使用相同的 routing_key),那么默认情况下 不能保证只有一个消费者消费,而是会按照 轮询(Round-Robin) 的方式分发给多个消费者。


1. 默认行为(多个消费者订阅同一个队列)

场景描述

  • Direct Exchange 绑定了 1 个队列(Queue),并指定了 routing_key(如 payment.success)。

  • 多个消费者 同时订阅这个队列。

消息分发方式

✅ 轮询(Round-Robin)

  • RabbitMQ 会 依次 将消息分发给不同的消费者,不会保证唯一消费

  • 例如:

    • Consumer1 收到消息1、消息3、消息5...

    • Consumer2 收到消息2、消息4、消息6...

代码示例

python

# 生产者发送消息到 Direct Exchange
channel.basic_publish(exchange="direct_exchange",routing_key="payment.success",  # 匹配绑定的队列body="Order123 paid"
)# 多个消费者订阅同一个队列
channel.basic_consume(queue="payment_queue", on_message_callback=consumer1)
channel.basic_consume(queue="payment_queue", on_message_callback=consumer2)

结果:消息会被 consumer1 和 consumer2 轮流消费,而不是仅由一个消费者处理。


2. 如何确保只有一个消费者消费?

如果你希望 同一消息只被一个消费者处理,有以下几种方案:

方案 1:单队列 + 单消费者

  • 只启动 1 个消费者,其他消费者不订阅该队列。

  • 缺点:无法扩展,吞吐量低。

方案 2:RabbitMQ 单活跃消费者(Single Active Consumer)

  • RabbitMQ 3.8+ 支持 单活跃消费者 模式:

    python

    channel.queue_declare(queue="payment_queue",arguments={"x-single-active-consumer": True}  # 启用单活跃消费者
    )
  • 行为

    • 多个消费者可以注册,但 只有第一个注册的消费者能接收消息

    • 如果该消费者断开,RabbitMQ 会自动切换到下一个消费者。

  • 优点

    • 无需额外组件(如 Redis 锁)。

    • 自动故障转移。

  • 缺点

    • 仍然不能并行处理消息。

方案 3:业务幂等性(推荐)

  • 允许消息被多个消费者消费,但业务逻辑保证 重复消费不影响结果(如数据库唯一约束、乐观锁)。

  • 优点

    • 高可用,可扩展多个消费者。

  • 缺点

    • 业务逻辑需要支持幂等。

方案 4:分布式锁(Redis / DB 锁)

  • 消费者处理消息前先获取锁:

    python

    def callback(message):lock_key = f"lock:{message.body.order_id}"if redis.set(lock_key, "1", nx=True, ex=60):  # 加锁process_payment(message)redis.delete(lock_key)  # 释放锁else:channel.reject(message.delivery_tag, requeue=True)  # 重新入队
  • 优点

    • 严格保证唯一消费。

  • 缺点

    • 依赖外部存储(Redis/DB)。

    • 锁超时时间需合理设置。


3. 总结

方案适用场景是否严格唯一消费扩展性
单队列 + 单消费者低吞吐场景✅ 是❌ 差
单活跃消费者(RabbitMQ 3.8+)需要自动故障转移✅ 是❌ 差
业务幂等性高并发场景❌ 否(但业务层防重)✅ 好
分布式锁严格一致性✅ 是⚠️ 中等

推荐

  • 如果业务允许,优先采用 幂等性(方案 3)。

  • 如果需要严格单消费者,使用 单活跃消费者(方案 2)或 分布式锁(方案 4)。


关键结论

🚨 Direct Exchange + 相同 routing_key + 相同队列 + 多个消费者 = 消息轮询分发(不保证唯一消费)
如果业务需要 严格单消费者,必须额外控制(如单活跃消费者或分布式锁)

http://www.dtcms.com/wzjs/819749.html

相关文章:

  • 三合一网站建设报价国际1688网站
  • 新手怎么做企业网站手机网站关于我们
  • 宣传网站制作廊坊哪些公司做网站
  • 廊坊seo建站游戏合作渠道
  • 深圳cms建站系统正规网站优化哪个公司好
  • 佛山推广平台兰州企业网站优化
  • 河源市建设厅网站绍兴网站建设方案托管
  • 天水+网站建设wordpress恢复小工具
  • 番禺网站建设哪里有vs2015做网站如何添加控件
  • 青岛seo做的好的网站wordpress 小工具移动
  • 做简历有什么网站连云港做网站的
  • 网站整合discuz论坛wamp wordpress 安装
  • 网站首页排名seo搜索优化ftp下载wordpress
  • 玉林市网站建设品牌营销推广策划方案
  • 网站规划说明书品牌制作网站
  • 打开网站notfoundapp开发公司的组织架构
  • 免费企业建网站手机移动端网站建设
  • 霞山网站建设公司企业网站后台模板
  • 最全网站源码分享沧州市宇通网站建设公司
  • 昆明网站建设制作个人备案网站可以做论坛吗
  • 班级网站网页设计wordpress oss 插件
  • 云南网站开发报价安徽安庆旅游必去十大景点
  • 企业网站流程图网站更新后 为什么不显示
  • 正规的环保行业网站开发廊坊做网站多少钱
  • 游戏推广员平台镇江关键字优化品牌
  • 网站开发中间商怎么做购物网站有哪些
  • 郑州模板网站网站建设的建议
  • 在虚拟机中如何做二级域名网站食堂网站建设
  • 专门做衬衣的网站学计算机
  • 知名网站建设加盟合作3 如何进行网站优化设计