对于秒杀类似的高并发大流量处理问题,采用消息中间件处理比较合适。网上大部分解决方式似乎都在消费者端,采用basicQos限制消息取出个数,basicAck手动处理执行结果。其实很大部分不需要到消费者来处理,直接限制死队列的消息数,拒绝超过指定消息数的请求。可以考虑使用控制队列长度来完成。rabbitmq默认是超过数量的先废弃或进入死信,文档有个overflow的参数可以指定废弃的顺序,默认dropHead,改为reject-publish后会废弃最新的消息。

    public Queue queue() {return QueueBuilder.nonDurable("mk")  .maxLength(3).overflow(QueueBuilder.Overflow.rejectPublish).build();}

然而,通过测试发现,不管设置reject-publish或drop-head均没效果,都是采用废弃最新的消息,这样就无法满足我们秒杀的排队规则。也试过使用每次获取队列数量来控制队列消息数,但测试发现耗时太高。

    public void getMessageCount() {long a = ToolKang.getUnixTimeDateMillisecond();String queue = "mk";AMQP.Queue.DeclareOk declareOk = template.execute(new ChannelCallback<AMQP.Queue.DeclareOk>() {public AMQP.Queue.DeclareOk doInRabbit(Channel channel) throws Exception {return channel.queueDeclarePassive(queue);}});long b = ToolKang.getUnixTimeDateMillisecond();}

Redis自增key 的好处

原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做。
Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;
Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作
简单解释就是你的服务即使是多机器多进程的,incr也能保证每次返回的结果不会出现相同的值。

通过自增来实现队列数量的控制,效果比较好,同时也减轻消费端的压力,在源头就限制了队列消息数量。(虽然消费端也控制了读取数量)

Rabbitmq 消息中间件 秒杀问题思考相关推荐

  1. ①RabbitMQ 消息中间件/消息队列、单节点、集群、镜像集群

    文章目录 RabbitMQ 消息中间件/消息队列 1.消息中间件 1.简介 2.作用 消息中间件的两种模式 P2P模式 Rabbitmq Pub/Sub模式(发布/订阅:Topic,可以重复消费) K ...

  2. RabbitMQ消息中间件技术精讲全集

    RabbitMQ消息中间件技术精讲 导航: RabbitMQ消息中间件技术精讲 一. 主流消息中间件介绍 1.1 ActiveMQ 1.2 Kafka 1.3 RocketMQ 1.4 RabbitM ...

  3. 慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结

    慕课网<RabbitMQ消息中间件极速入门与实战>学习总结 时间:2018年09月05日星期三 说明:本文部分内容均来自慕课网.@慕课网:https://www.imooc.com 教学源 ...

  4. SpringCloud项目:实现推送消息到RabbitMQ消息中间件

    作者:杨桃桃 blog.csdn.net/yt812100/article/details/111785839 一.CRT创建RabbitMQ容器 CRT容器自带RabbitMQ消息中间件,只需要在C ...

  5. RabbitMq 消息中间件介绍初体验

    RabbitMq 消息中间件介绍&为什么要使用消息中间件&什么时候使用消息中 间件   我们用java来举例子, 打个比方 我们客户端发送一个下单请求给订单系统(order)订单系统发 ...

  6. springboot集成rabbitmq商品秒杀业务实战(流量削峰)

    消息队列如何实现流量削峰? 要对流量进行削峰,最容易想到的解决方案就是用消息队列来缓冲瞬时流量,把同步的直接调用转换成异步的间接推送,中间通过一个队列在一端承接瞬时的流量洪峰,在另一端平滑地将消息推送 ...

  7. rabbitmq实现秒杀中订单流量削峰

    前言 在Redis秒杀功能设计与实现一篇中,我们使用redis实现了商品的秒杀抢购功能,在当前的设计中,只涉及到商品抢购,即用户锁定名额,并将成功抢购到的用户信息保存到redis中了 但是一个完整的抢 ...

  8. Linux中级实战专题篇:rabbitmq(消息中间件p2p模式和pub模式,消息队列rabbitmq详解,单机安装,集群部署以及配置实战)

    一.消息中间件相关概念 1.简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台相关 的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息 队列模型,可以在分布 ...

  9. RabbitMQ消息中间件-基础篇

    文章目录 一.什么是MQ 1.1 mq的作用 1.2 mq的区别 二. RabbitMQ 2.1 四大核心概念 2.2 RabbitMQ核心部分 2.3 RabbitMQ工作原理 三.docker安装 ...

最新文章

  1. 2022-2028年中国工业固体废物综合利用行业深度调研及投资前景预测报告
  2. 量子力学——超弦理论、M理论(膜论)
  3. 2018年第九届蓝桥杯C/C++ C组国赛 —— 第四题:约瑟夫环
  4. 带你走进网站分析的世界!
  5. ECCV18 | 无监督难分样本挖掘改进目标检测
  6. PyTorch 1.0 中文文档:CUDA 语义
  7. javascript的数据检测总结
  8. 当html里语义化,HTML5语义化
  9. 改良版class选择器
  10. 使用计算机的好处作文,电脑的好处
  11. 死锁问题分析(个人认为重点讲到了gap间隙锁,解决了我一些不明报死锁的问题)
  12. 数组越界也可以这么巧~~~
  13. scipy库的pearsonr(x, y)的使用
  14. 深度学习领域堪称圣经的书籍(深度学习又称之为花书)-由图灵奖获得者Yoshua Bengio所著
  15. undefined运算
  16. 苹果手机怎么在照片上添加文字_怎么给手机照片添加文字?没想到方法这么容易,1分钟就能学会...
  17. 做自己想做的工作,你也可以
  18. unity 导出 ios 项目运行在模拟器
  19. 【转】Redis 分布式——可用性保证之 Sentinel(实战篇)
  20. JAVA日记之SpringJdbcTemplate/声明式事务控制 ----喝最烈的酒.

热门文章

  1. Ps安装包下载(cs6)
  2. 10个最新的 Bootstrap 3 管理模板
  3. 2021年保育员(初级)证考试及保育员(初级)复审模拟考试
  4. 【路径规划】基于matlab汽车零部件循环取货路径优化(三维装载约束)【含Matlab源码 1100期】
  5. 7思妙想之Js 实现for循环中的停顿
  6. Android 嵌套H5 网页,图片上传无法调用手机图片以及嵌套网页中无法调用另一款APP问题记录
  7. 腾讯云安装xampp搭建WordPress个人博客(步骤详细,小白向)
  8. 【Matlab】求解多元一次方程组
  9. 儿童首饰饰品CPC认证怎么办理?饰品CPC测试项目
  10. 中国极紫外(EUV)光刻胶行业营销动态与应用前景预测报告2022-2027