范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

RabbitMQ延时队列应用场景,学到了

  应用场景
  我们系统未付款的订单,超过一定时间后,需要系统自动取消订单并释放占有物品
  常用的方案
  就是利用Spring schedule定时任务,轮询检查数据库
  但是会消耗系统内存,增加了数据库的压力、还存在较大的时间误差
  解决: rabbitmq 的消息TTL和死信Exchange结合 介绍1.何为消息TTL、死信
  死信:对消息设置的过期时间到了,这个消息还没有被消费就认为这个消息死了,死了的消息会进入死信交换机(Dead Letter Exchanges)
  成为死信的三种条件:  一个消息被Consumer拒收了,并且reject方法的参数里requeue是false。也就是说不会被再次放在队列里,被其他消费者使用。(basic.reject/ basic.nack)requeue=false  上面的消息的TTL到了,消息过期了。  队列的长度限制满了。排在前面的消息会被丢弃或者扔到死信路由上
  消息TTL:消息的TTL就是消息的存活时间
  RabbitMQ可以对队列和消息都设置过期时间,但代表的都是一个意思,只要消息在设置时间内没有消费,消息就死了,就被称为死信
  如果队列和消息都设置了过期时间,那么就取时间最小的,单个消息的过期时间才是延时队列的关键  2.如何运作设置队列过期时间
  消费者P会通过一个路由键deal.message发送消息给X交换机,然后继续发送给delay queau队列,这个队列比较特殊,设置了过期时间5分钟过期,还设置了x-dead-letter-exchange用于指定下一个接收的交换机,消息过期之后会成为死信直接进入delay.exchange交换机,利用x-dead-letter-routing-key绑定的路由键找到下一个队列,这时候只需要有人监听这个队列。  设置消息过期时间
  消费者发送一个消息,设置了5分钟过期时间,最后交给了延时队列,延时队列说消息死了不要乱放,指定了一个死信路由,用于找到下一个队列的路由键,等到五分钟后服务器会自动检查是否过期,过期的话会交给delay.exchange路由,最后再交给delay.message  代码模拟
  下订单成功先发动给 order-event-exchange ,order-event-exchange 绑定了两个路由键order.create.order 、order.release.order ,根据order.create.order 路由键找到order.delay.queue 队列,这是一个特殊的队列,上图所诉,消息的存活时间为一分钟,消息在order.delay.queue 队列中没人使用变成死信了,交给order-event-exchange 交换机,最后通过order.release.order 绑定关系找到了order.release.order.queue 队列
  @Configuration
  public class MyMQConfig {
  //监听最后一个队列,获取那些过期的订单消息
  @RabbitListener(queues =   "order.release.order.queue"  )
  public void listerner(OrderEntity orderEntity,Channel channel,Message message) throws IOException {
  System.out.println("收到过期订单信息"  +orderEntity.getOrderSn());
  channel.basicAck(message.getMessageProperties().getDeliveryTag(),false  );
  }
  //特殊队列
  @Bean
  public Queue orderDelayQueue  () {
  Map arguments = new HashMap<>();
  arguments.put("x-dead-letter-exchange"  , "order-event-exchange"  );
  arguments.put("x-dead-letter-routing-key"  , "order.release.order"  );
  arguments.put("x-message-ttl"  , 60000);
  Queue orderDelayQueue = new Queue("order.delay.queue"  , true  , false  , false  , arguments);
  return   orderDelayQueue;
  }
  //最后接收死信消息的队列
  @Bean
  public Queue orderReleaseQueue  () {
  return   new Queue("order.release.order.queue"  , true  , false  , false  );
  }
  //事件交换机
  @Bean
  public Exchange orderEventExchange  () {
  return   new TopicExchange("order-event-exchange"  , true  , false  );
  }
  //绑定order.delay.queue队列和的order-event-exchange交换机的路由键
  @Bean
  public Binding orderCreateBingding  () {
  return   new Binding("order.delay.queue"  , Binding.DestinationType.QUEUE, "order-event-exchange"  , "order.create.order"  , null);
  }
  //绑定order.release.order.queue队列和的order-event-exchange交换机的路由键
  @Bean
  public Binding orderReleaseBingding  () {
  return   new Binding("order.release.order.queue"  , Binding.DestinationType.QUEUE, "order-event-exchange"  , "order.release.order"  , null);
  }
  }测试
  @Autowired
  RabbitTemplate rabbitTemplate;
  @ResponseBody
  @GetMapping(  "/test/createOrder"  )
  public String createOrderTest  (){
  OrderEntity entity = new OrderEntity();
  entity.setOrderSn(UUID.randomUUID().toString());
  entity.setModifyTime(new Date());
  rabbitTemplate.convertAndSend("order-event-exchange"  ,"order.create.order"  ,entity);
  return   "ok"  ;
  }
  库存解锁实际场景
  在库存服务有个 stock-event-exchange 交换机,如果我们想要解锁库存,
  1、首先订单下成功、库存锁定成功
  2、锁定成功就要通过 stock.locked 路由键发送一个消息给交换机stock-event-exchange ,消息内容包括哪个订单、哪些商品、多少库存等等
  3、交换机通过绑定关系再发送给延时队列 stock.delay.queue
  4、订单可能需要30分钟才会自动关闭,50分钟之后来检查库存,就会知道订单支付没有
  5、50分钟消息没有被消息,就变为死信,通过 stock.release 路由键绑定关系交给stock-event-exchange 交换机
  6、 stock-event-exchange 交换机通过stock.release 路由键绑定关系找到strock.relelase.stock.queue队列
  7、所有的解锁库存服务就监听这个队列里的消息,只要这个队列里消息能够到达的都是超时没有支付订单的
  下单远程锁定库存,然后将仓库锁定库存的数据发给订单,当在订单下单失败时,由于不是分布式事务,订单回滚,但仓库不回滚,所以订单一失败,就需要通过订单拿到mq中仓库传来的数据通知仓库解锁库存
  库存解锁场景:
  1、下订单成功,订单过期没有支付被系统自动取消或者用户手动取消,都要解锁库存
  2、下订单成功、库存锁定成功,但是业务调用失败导致订单回滚,之前锁定的库存就自动解锁,Seata分布式事务太慢,就要用一段时间后自动解决库存。
  3、订单失败,因为锁库存失败有一个商品没有锁成功,导致整个锁库存服务都回滚,
  消息队列收到库存消息场景
  消息队列收到消息之后  如果没有查到数据库有锁定成功的数据,说明库存锁失败了,锁库存自动回滚,数据库查不到记录无需解锁  如果查到有数据,就说明库存锁定成功了  没有这个订单必须解锁库存  有订单,订单没人支付失效了才能解锁库存  定时关闭订单实际场景
  同上原理类似也是利用 死信路由 ,订单创建后,默认放入延时队列,也就是订单的有效时间,超过这个时间没有支付或者用户主动取消都会导致订单信息进入order.release.order.queue 队列,最后被释放

哪些城市有BRT快速公交?快速公交系统(BusRapidTransit,BRT)作为公共交通中的一种方式,其定义为一种灵活的橡胶胎车辆的快速公共交通营运模式。它是由快速公交车站快速巴士服务营运方式智能公交系专精特新三料小巨人,氢能源无人机新星,股价还在10元下方最近大热的锂电池光伏等新能源板块,在持续大热之后,也出现了降温,而类似于新希望此类经过较长时间回调被忽视的公司,反而受到了资金的追捧。而今天看的这家公司,同样也算是被市场所忽略。不定频空调和变频空调那个好,不要犹豫了天太热了,好多人纠结买空调卖什么牌子,我给大家推荐2个牌子性价比?买空调买个合适的匹数能带动起来。买2匹数的空调到时候房间带动不起来,后期都是事。消费者问的最多的问题,定频和变频空8月份国产轿车销量排行,新能源汽车包揽冠亚军,帝豪仅排第五Hello大家好,欢迎来到小蚊子聊车!今天为大家带来2021年8月份国产轿车的销量排名情况!从数据上看,榜单上共有五款车型的成绩达到了一万台以上,其中五菱宏光MINIEV卖出4118月新能源销量排名出炉,Model3跌出榜单,比亚迪抢着买乘联会数据显示,8月份国内狭义乘用车市场销量达145。1万辆,同比下降14。8,环比下降3。4。其中,新能源狭义乘用车销量达25万辆,同比增长168,环比增长12。3,增幅继续领跑日本举国押注,华为也开始布局,氢能真的是新能源的未来吗?近日,华为的一场签约引发了无限遐想。7月8日,华为公司与大连化物所签署了战略合作协议。这个研究所拥有我国能源领域的第一个研究氢能源燃料电池的国家实验室。然而芯片哥要告诉你的是,氢能新能源汽车所需的钴金属,被中国把控?战略价值有多大?图为钴块为了实现节能减排的目标,各科技强国都在大力研发新能源汽车,然而新能源汽车也需要运用大量的资源,然而如今又一关键资源被中国主导,其战略价值丝毫不输给稀土,它就是钴金属,而新能OPPOFindX4很强势,100倍超级变焦5160mAh4K分辨率,顶级机皇OPPO最近也是有新机即将发布,不过不是OPPOFindX系列的,而是子品牌realme的Neo2,这部手机比较有意思的是还没有发布就先因为游戏测试数据火了。大家也都知道能今年的骁安卓都该学学,苹果厚道iOS15升级覆盖iPhone6s,老手机继续用对于不少已经用上iPhone的小伙伴来说,现在等待的可能不仅仅是iPhone13,还有一个新系统IOS15。如果说新手机还能让大家斟酌一下买还是不买,那iOS15就根本没这个可能了不支持5G的手机,现在还值得买吗?现在手机换代太快了,特别是安卓机的更新换代,比我上班快迟到时冲刺的速度还快。而且现在新出的安卓机标配就是支持5G网络,当然,没有芯片的华为除外。那么,不支持5G的手机,现在还值得买曲屏手机有哪些好的推荐?感谢您的阅读!曲屏手机求推荐?我们最早使用的曲面屏手机是从三星手机开始的,不过我一直认为三星的早期的曲面屏手机的设计并不完善,并不能够让我感受到曲面屏设计带给我的美感,因此我之前对
北京大学与腾讯达成战略合作启动数字中国筑塔计划4月26日,以探路数字中国共筑创新之塔为主题,北京大学与腾讯公司战略合作发布会暨数字中国筑塔计划启动仪式,在北京大学举行。北京大学光华管理学院院长教授刘俏,腾讯公司高级执行副总裁云五一大折购!买折叠屏手机只需要8788今年年初,华为小米各自推出了新一代折叠屏手机,在这场没有硝烟的手机战争中,折叠屏手机这一新品类逐渐受到消费者青睐。但无论是华为还是小米,旗下折叠屏手机都面临着供应短缺的问题,甚至价多快好省!3012件海量专利护航恒大造车路上海车展意犹未尽,恒大汽车再续传奇。5月12日,恒大汽车发布公告,首次对外公布专利信息,在中国及国外总共申请专利3012件,其中已获得授权专利1355件。海量专利曝光,恒驰盛世美颜人民日报中国奥运健儿热搜逐渐走偏奥运专题今天是2020东京奥运会的第15天,马上就要结束了。中国队已拿下34块金牌,暂列第一。很多网友都有一个感觉,这届奥运会和往届似乎不太一样,人民日报微信公众号发出了这几天,中国奥运健从全民读书到全民听书,微博助喜马拉雅再度引爆耳朵经济每天早晨,挤上拥挤的地铁后,小余做的第一件事就是戴上耳机,打开听书软件。上下班拿书不方便,把走路挤地铁的琐碎时间拼凑起来,就能听完一本书。移动设备的高速发展,让书本逐渐从纸质搬上了抢滩喜剧赛道,广汽雷凌又在微博追热点?公司团建去了158个人,这不是放下社会,这是把社会带上了啊。植发的原理不就是拆东墙补西墙嘛!后脑勺的头发恐怕这辈子都没想到,自己居然还有机会成为刘海。近年来,脱口秀逐渐破圈成为文娱奢品行业的创新洞察和社交资产沉淀2021微博奢品营销创新赋能大会从2000年到2018年的18年时间,中国人的奢侈品消费占全球市场份额的比例,从1100上升到了13,中国市场已经成为成为奢侈品市场的中流砥柱。毫无疑问,中国市场成为奢侈品品牌必须从默默无闻到野性消费,是什么让这些品牌在社交场实现聚变?最近几天,除了奥运会,最能够牵动人们心弦的,就是河南暴雨事件了。河南暴雨事件第一次出现在大众的视线当中,是因为7月20日在微博出现的郑州5号线事件的求助信息。在这则求助信息发布后,